O SQL Server tem um recurso exclusivo de permitir que você execute lógica programática em tempo real nos valores de sua consulta. Com base nessas avaliações lógicas, você pode gerar vários valores como parte do conjunto de dados retornado.
Usando a declaração CASE
Isso é feito mais facilmente em todas as versões do SQL Server usando o
CASE
instrução, que atua como um IF...THEN...ELSE
lógico expressão e retorna vários valores dependendo do resultado. Neste exemplo abaixo, queremos retornar um
locale
adicional coluna que especifica se nosso livro se passa na Terra-média ou na Terra antiga regular. SELECT
CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale,
books.*
FROM
books
Antes de examinarmos o
CASE
especial aspecto desta declaração, vamos remover temporariamente o CASE
notar que este é um SELECT
extremamente simples declaração na superfície:SELECT
books.*
FROM
books
Portanto, vamos examinar como o
CASE
seção está estruturada e qual o comportamento lógico que estamos realizando. CASE
WHEN
books.title = 'The Hobbit'
THEN
'Middle-earth'
WHEN
books.primary_author = 'Tolkien'
THEN
'Middle-earth'
ELSE
'Earth'
END AS locale
Para começar, inicializamos o
CASE
então especifique sob quais condições (WHEN
) nosso CASE
declaração deve avaliar um resultado. Neste exemplo, estamos examinando o books.title
e books.primary_author
; se se encaixar no nosso tema Tolkien-esque, THEN
retornamos o valor 'Middle-earth'. Se nenhum dos campos corresponder à nossa pesquisa, retornaremos o valor de 'Earth'. Para reorganizar a lógica como um pseudocódigo
IF...THEN...ELSE
instrução, estamos simplesmente pedindo ao SQL para avaliar:IF
title == 'The Hobbit' OR
primary_author == 'Tolkien'
THEN
RETURN 'Middle-earth'
ELSE
RETURN 'Earth'
END
Finalmente, é fundamental lembrar que um
CASE
A instrução deve sempre ser anexada no final com um END
correspondente demonstração. No exemplo acima, também estamos renomeando o valor resultante que é retornado para locale
, embora isso seja certamente opcional. Usando a função IIF
Se você estiver usando uma versão mais moderna do SQL, é útil saber que o SQL Server 2012 introduziu o muito útil
IIF
função. IIF
é um método abreviado para executar um IF...ELSE
/CASE
e retornando um de dois valores, dependendo da avaliação do resultado. Reestruturando nosso exemplo acima para usar
IIF
é bem simples. SELECT
IIF(
books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
'Middle-earth',
'Earth')
AS locale,
books.*
FROM
books
Com um
IIF
função, nós substituímos grande parte do açúcar sintático do CASE
declaração com alguns separadores de vírgulas simples para diferenciar nossos argumentos. Tudo dito, ambos
CASE
e IIF
faça o mesmo trabalho, mas se tiver a opção, IIF
geralmente será muito mais simples de usar.