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.