SQL Server tiene una capacidad única que le permite ejecutar lógica programática en tiempo real en los valores dentro de su consulta. Según esas evaluaciones lógicas, puede generar varios valores como parte del conjunto de datos devuelto.
Uso de la declaración CASE
Esto se logra más fácilmente en todas las versiones de SQL Server usando el CASE
declaración, que actúa como una lógica IF...THEN...ELSE
expresión y devuelve varios valores dependiendo del resultado.
En este ejemplo a continuación, queremos devolver un locale
adicional columna que especifica si nuestro libro tiene lugar en la Tierra Media o en la Tierra antigua normal.
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 examinar el CASE
especial aspecto de esta declaración, eliminemos temporalmente el CASE
para notar que este es un SELECT
extremadamente simple declaración en la superficie:
SELECT
books.*
FROM
books
Por lo tanto, examinemos cómo el CASE
sección está estructurada y qué comportamiento lógico 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 comenzar, inicializamos el CASE
luego especifica bajo qué condiciones (WHEN
) nuestro CASE
declaración debe evaluar un resultado. En este ejemplo, estamos examinando books.title
y books.primary_author
; si se ajusta a nuestro tema Tolkien-esque, THEN
devolvemos el valor 'Tierra Media'. Si ninguno de los campos coincide con nuestra búsqueda, en su lugar devolvemos el valor de 'Tierra'.
Para reorganizar la lógica como un psuedo-código IF...THEN...ELSE
declaración, simplemente le estamos pidiendo a SQL que evalúe:
IF
title == 'The Hobbit' OR
primary_author == 'Tolkien'
THEN
RETURN 'Middle-earth'
ELSE
RETURN 'Earth'
END
Finalmente, es fundamental recordar que un CASE
La declaración siempre debe agregarse al final con un END
coincidente declaración. En el ejemplo anterior, también cambiamos el nombre del valor resultante que se devuelve a locale
, aunque eso es ciertamente opcional.
Usando la función IIF
Si está utilizando una versión más moderna de SQL, es útil saber que SQL Server 2012 introdujo el muy útil IIF
función. IIF
es un método abreviado para realizar un IF...ELSE
/CASE
instrucción y devolver uno de dos valores, dependiendo de la evaluación del resultado.
Reestructurando nuestro ejemplo anterior para usar IIF
es bastante simple.
SELECT
IIF(
books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
'Middle-earth',
'Earth')
AS locale,
books.*
FROM
books
Con un IIF
función, reemplazamos en gran medida gran parte del azúcar sintáctico del CASE
declaración con algunos simples separadores de coma para diferenciar nuestros argumentos.
En total, ambos CASE
y IIF
hacer el mismo trabajo, pero si se le da la opción, IIF
generalmente será mucho más simple de usar.