Articles

Instrucción SQL CASE-Formularios simples y buscados

El propósito principal de una expresión SQL CASE devuelve un valor basado en una o más pruebas condicionales. Se permiten expresiones de casos de uso en cualquier lugar de una expresión de instrucción SQL. Aunque realmente es una expresión, algunas personas se refieren a ellas como «declaraciones de casos».»Lo más probable es que esto se deba a su uso en lenguajes de programación.

La expresión SQL CASE es extremadamente versátil y se utiliza en todas las consultas de SQLServer. En particular, se utiliza en las cláusulas SELECT column list, GROUP BY, HAVING y ORDER BY. La expresión CASE también estandariza (embellece) los datos o realiza comprobaciones para protegerlos de errores, como dividir por cero.

Todos los ejemplos de esta lección se basan en Microsoft SQL Server Management Studio y la base de datos AdventureWorks2012. Primeros pasos en el uso de SQL Server usando mi guía gratuita y herramientas gratuitas de Microsoft.

Sentencia CASE de SQL Server

Hay dos formas para la cláusula CASE: simple y searched. Ambos formularios devuelven un resultado basado en probar una expresión. A pesar de las expresiones técnicas, verás que muchas personas se refieren a ella como una declaración.

La instrucción SQL CASE simple se utiliza para pruebas de igualdad. Prueba una expresión contra varios valores, lo que la hace ideal para transformar un conjunto de valores, como abreviaturas a su forma larga correspondiente.

La instrucción SQL CASE buscada utiliza un formato de evaluación de expresiones más completo. Es bueno cuando desea trabajar con rangos de datos, como rangos salariales o edades.

Primero comenzamos con el formulario simple, y luego cubrimos la búsqueda.

el CASO de la expresión Simple de Formulario

la forma simple de La expresión CASE compara los resultados de una expresión con una serie de pruebas y devolver un «resultado» cuando la «prueba» devuelve true.

El formulario general para una expresión de MAYÚSCULAS y minúsculas de formulario simple es:

CASE expression
WHEN test THEN result

ELSE otherResult
END

La instrucción ELSE es opcional en una expresión de MAYÚSCULAS y minúsculas. Devuelve «otherResult» cuando no hay coincidencias y ELSE está presente. Si no hay NADA MÁS en la instrucción CASE, devuelve NULL.

La cláusula ELSE es una excelente manera de detectar valores de datos incorrectos o inesperados y devolver un resultado que no sea NULO.

Ejemplo de transformación de datos

Hay varias razones para usar una instrucción CASE. La primera es transformar datos de un conjunto de valores a otro. Por ejemplo, para mostrar el género de un empleado como «Hombre» o «Mujer», cuando sus datos están codificados como «M» o «F», use una expresión de CASO para probar la representación de un solo carácter y devuelva su forma larga correspondiente.

El ejemplo de esto es:

SELECT JobTitle,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
ELSE 'Unknown Value'
END
FROM HumanResources.Employee

Ejemplo de estandarización de datos

De manera similar, puede usar una cláusula CASE simple para estandarizar varios valores en uno. Al extender nuestro ejemplo, se asignan varias variaciones a Hombres o Mujeres:

Puede que se pregunte si podría crear otra tabla en su base de datos y usarla para buscar los valores. Tendería a estar de acuerdo en que sería lo mejor, pero en muchas situaciones no tendrá permiso para crear tablas en la base de datos. En este caso, se le deja a su ingenio una declaración SELECT proporciona.

Resumen

Estas son algunas cosas a tener en cuenta al usar la expresión de caso simple:

  • Solo permite comparaciones de igualdad.
  • Evalúa las pruebas se evalúan en el orden definido.
  • Devuelve el resultado correspondiente a la primera prueba VERDADERA.
  • Si no se hace ninguna coincidencia, case devuelve NULL a menos que haya OTRA COSA presente.

Formulario de búsqueda de expresión de CASO

El formulario de búsqueda de la expresión de CASO permite pruebas más versátiles. Úselo para evaluar una mayor variedad de pruebas. De hecho, cualquier expresión booleana califica como una prueba.

Una expresión de mayúsculas y minúsculas buscada tiene este formato

CASE
WHEN booleanExpression THEN result

ELSE otherResult
END

Con el formulario buscado, use cláusulas WHEN para evaluar expresiones booleanas. Se devuelve el resultado de la primera expresión booleana VERDADERA.

A continuación se muestra la forma de CASO buscado del ejemplo de género de empleado de la sección anterior.

También usamos este mismo ejemplo para la instrucción SQL case simple. Hice esto para que pudieras ver la sutil diferencia. Observe que cada cláusula WHEN ahora contiene la prueba como una expresión booleana.

Comparación de formularios Simples y buscados SQL CASE

Aquí están las instrucciones una al lado de la otra:

Expresión de caso simple versus Búsqueda

Tiendo a usar el formato de expresión de caso buscado en todo mi SQL. Esta razón es simple, ¡solo tengo que recordar un formato!

Dado que estamos probando expresiones booleanas, la instrucción de mayúsculas y minúsculas buscada no se limita a pruebas de igualdad. Esto hace que este formulario sea realmente bueno para comparar rangos de valores. Tal vez el gerente de ventas de Adventure Works quiera organizar los productos por rango de precios. ¿Cómo se podría hacer esto con SQL?

Dados los siguientes nombres y rangos proporcionados por el gerente de ventas, podemos construir una expresión de CASO para comparar el precio de lista con un rango de valores y luego devolver el nombre del rango de precios apropiado.

La instrucción case se coloca en la lista de columnas SELECT y devuelve un valor de carácter. Aquí está el SQL que hace el truco:

Cuando ejecute esta consulta, verá una lista de PriceRange y mostrará valores de acuerdo con los rangos especificados en la expresión CASE:

Resultados de la instrucción CASE

instrucciones CASE también se puede usar para ayudar a prevenir errores. Un buen ejemplo es probar valores válidos dentro de expresiones como cuando divides números.

Considere

SELECT ProductID,
Name,
ProductNumber,
StandardCost,
ListPrice,
StandardCost / ListPrice as CostOfGoodSold
FROM Production.Product

Esta declaración devolver el mensaje

Divide by zero error encountered.

mediante el uso de una cláusula CASE podemos asegurar que no sin querer dividir por cero.

SELECT ProductID, Name, ProductNumber, StandardCost, ListPrice, CASE WHEN ListPrice = 0 Then NULL ELSE StandardCost / ListPrice END as CostOfGoodSoldFROM Production.Product

UN CASO de expresión puede utilizarse en cualquier lugar donde se pueda usar una expresión. Esto significa que puede usarlo para devolver un resultado de valor de columna o incluso usarlo en una cláusula ORDER BY.

En la siguiente sección exploraremos el uso de MAYÚSCULAS y minúsculas en las cláusulas ORDER BY y GROUP BY.

Expresión DE caso en ORDEN POR

Continuando con la solicitud del gerente de ventas, supongamos que también quiere ver los productos ordenados por rango de precios y luego por nombre de producto. Hemos visto cómo podemos mostrar los rangos de precios como una columna, pero ¿cómo ordenamos?

en Realidad es bastante fácil. Dado que CASE es una expresión, podemos usarla como uno de los valores a partir de los cuales ordenamos los resultados. Recuerde, no estamos limitados a solo ordenar columnas de tabla, también podemos ordenar una expresión.

Aquí está la consulta para ordenar por el rango de precios.

Luego podemos agregar la instrucción CASE a SELECT list para mostrar también el rango de precios.

Como puedes ver, las cosas empiezan a complicarse. ¿Ve cómo se repite la instrucción CASE tanto en la lista SELECT como en ORDER BY? Afortunadamente, podemos simplificar esto un poco, pero eliminando la instrucción CASE del ORDEN BY y reemplazándola con el nombre de alias de la expresión SELECT list CASE, PriceRange de la siguiente manera:

Expresión CASE en GRUPO POR

Ahora que le hemos dado al gerente de ventas una lista detallada que quiere ver los datos de resumen, ¿nunca termina? En mi experiencia, no lo hace, por lo que conocer muchos SQL para satisfacer las demandas de los clientes es la clave del éxito.

De todos modos, la buena noticia es que podemos usar la expresión CASE que hemos creado para crear grupos de resumen. En el siguiente SQL estamos agrupando los datos por rango de precios. Se crean estadísticas de resumen sobre el precio de lista mínimo, máximo y promedio.

A diferencia de la cláusula ORDER BY, no podemos hacer referencia al alias de columna PriceRange en el GRUPO BY. Se debe repetir toda la expresión de mayúsculas y minúsculas. Aquí están los resultados de nuestra consulta:

Resultados: Expresión de mayúsculas y minúsculas en GRUPO POR

Wrap Up

Como puede ver, el uso de expresiones de mayúsculas y minúsculas añade versatilidad a sus instrucciones SQL. No solo le permiten transformar datos de un conjunto de valores a otro, sino que también se pueden usar para garantizar que las instrucciones no devuelvan errores.

De los dos formularios, simples y buscados, suelo usar el formulario de búsqueda. La razón es que la forma simple se limita a pruebas de igualdad; mientras que la forma buscada puede hacer eso y más.

Dado que las expresiones mayúsculas y minúsculas son expresiones y no declaraciones o cláusulas, se pueden usar donde se usa cualquier otra expresión. Esto significa que se puede usar en toda la instrucción SELECT y en cualquier otro lugar de SQL.