Como utilizar a expressão CASE SQL com Valores
Você pode usar uma forma mais compacta do SQL CASO expressão se você está comparando um valor de teste para a igualdade com uma série de outros valores. Essa forma é útil dentro de um SELECIONAR ou ATUALIZAR declaração se uma tabela contém um número limitado de valores em uma coluna e você deseja associar um valor de resultado correspondente a cada um desses valores de coluna.
Se você usar CASO Desta forma, a expressão tem a seguinte sintaxe:
CASO teste_valorQUANDO ENTÃO value1 value2 result1WHEN ENTÃO result2 ... quando o valorn ENTÃO resultarnELSE resultadoxFIM
Se o valor de teste (test_value) é igual a value1, então a expressão assume o valor result1. E se tests_value não é igual value1 mas é igual value2, então a expressão assume o valor result2. A expressão tenta cada valor de comparação, por sua vez, todo o caminho para valorN, até atingir um jogo.
Se nenhum dos valores de comparação igual ao valor de teste, então a expressão assume o valor resultx. Mais uma vez, se a opcional OUTRO cláusula não está presente e nenhum dos valores de comparação corresponde ao valor de teste, a expressão recebe um valor nulo.
Para entender como a forma de valor funciona, considere um caso em que você tem uma tabela contendo os nomes e as patentes de vários oficiais militares. Você deseja listar os nomes precedido pela abreviatura correta para cada posto. A seguinte declaração faz o trabalho:
Select Case "geral" então Coronel 'Gen.'WHEN' RANKWHEN 'então' Col.'WHEN "tenente-coronel" depois "Lt. 'Capitão' Col.'WHEN 'major'THEN' Maj.'WHEN THEN 'Capt.'WHEN' primeiro-tenente 'então' primeiro. Lt.'WHEN "alferes" depois "2ª. Lt.'ELSE NULLEND, OFICIAIS LAST_NAMEFROM -
O resultado é uma lista semelhante ao exemplo que se segue:
Capt. MidnightCol. SandersGen. WashingtonMaj. DisasterNimitz
Chester Nimitz foi um almirante da Marinha dos Estados Unidos durante a Segunda Guerra Mundial. Porque sua posição não estiver listado na CASO expressão, o OUTRO cláusula de não dar-lhe um título.
Para outro exemplo, suponha capitão Meia-noite recebe uma promoção a major e você deseja atualizar o banco de dados OFICIAIS conformidade. Suponha que a variável officer_last_name contém o valor 'Midnight' e que a variável new_rank contém um número inteiro (4) Que corresponde ao novo posto de meia-noite, de acordo com a tabela a seguir.
New_Rank | Classificação |
---|---|
1 | geral |
2 | coronel |
3 | tenente-coronel |
4 | principal |
5 | capitão |
6 | primeiro-tenente |
7 | segundo tenente |
8 | NULO |
Você pode gravar a promoção usando o seguinte código SQL:
ATUALIZAÇÃO OFFICERSSET RANK = CASE: new_rankWHEN 1 THEN 'general'WHEN 2 THEN' colonel'WHEN 3 THEN 'tenente colonel'WHEN 4 THEN' major'WHEN 5 THEN 'captain'WHEN 6 THEN' primeira lieutenant'WHEN 7 THEN 'alferes 'QUANDO 8 Então NULLENDWHERE LAST_NAME =: officer_last_name -
Uma sintaxe alternativa para o CASO expressão com valores é:
CASEWHEN test_value = value1 ENTÃO result1WHEN test_value = value2 ENTÃO result2 ... quando test_value = valorn ENTÃO resultarnELSE resultadoxFIM