En este artículo, exploraremos el uso de las funciones CASE en consultas de SQL Server. Específicamente, nos enfocaremos en cómo utilizar las funciones CASE en cláusulas como group by.
Comencemos considerando un escenario en el que tenemos una tabla llamada “Emp” con columnas como id, Nombre, Apellido, Salario y Estado. Queremos crear una nueva columna llamada “Zona horaria” basada en la columna Estado.
Aquí hay una consulta de ejemplo que demuestra cómo lograr esto:
SELECT id, [Nombre], [Apellido], Salario,
ZonaHoraria = CASE
WHEN Estado IN ('WA', 'OR', 'NE', 'CO') THEN 'Pacífico'
WHEN Estado IN ('NY', 'NJ', 'VT', 'ME', 'NH', 'MA', 'RI', 'CT', 'PA', 'DE', 'MD', 'DC', 'VA', 'WV', 'MI', 'IN', 'OH', 'KY', 'NC', 'GA', 'FL') THEN 'Este'
WHEN Estado IN ('MT', 'ID', 'WY', 'UT', 'CO', 'AZ', 'NM') THEN 'Montaña'
WHEN Estado IN ('ND', 'SD', 'NE', 'KS', 'OK', 'TX', 'MN', 'IA', 'MO', 'AR', 'LA', 'WI', 'IL', 'TN', 'MS', 'AL') THEN 'Central'
WHEN Estado = 'AK' THEN 'Alaska'
WHEN Estado = 'HA' THEN 'Hawái'
END
FROM Emp;
Esta consulta producirá un conjunto de resultados con las columnas id, Nombre, Apellido, Salario y ZonaHoraria, donde ZonaHoraria se determina en función de la columna Estado.
A continuación, consideremos un escenario en el que queremos filtrar el conjunto de resultados para incluir solo las filas que pertenecen a las zonas horarias Este y Montaña.
Aquí hay una consulta de ejemplo que demuestra cómo lograr esto:
SELECT *
FROM (
SELECT id, [Nombre], [Apellido], Salario,
ZonaHoraria = CASE
WHEN Estado IN ('WA', 'OR', 'NE', 'CO') THEN 'Pacífico'
WHEN Estado IN ('NY', 'NJ', 'VT', 'ME', 'NH', 'MA', 'RI', 'CT', 'PA', 'DE', 'MD', 'DC', 'VA', 'WV', 'MI', 'IN', 'OH', 'KY', 'NC', 'GA', 'FL') THEN 'Este'
WHEN Estado IN ('MT', 'ID', 'WY', 'UT', 'CO', 'AZ', 'NM') THEN 'Montaña'
WHEN Estado IN ('ND', 'SD', 'NE', 'KS', 'OK', 'TX', 'MN', 'IA', 'MO', 'AR', 'LA', 'WI', 'IL', 'TN', 'MS', 'AL') THEN 'Central'
WHEN Estado = 'AK' THEN 'Alaska'
WHEN Estado = 'HA' THEN 'Hawái'
END
FROM Emp
) AS mytype
WHERE ZonaHoraria IN ('Montaña', 'Este');
Esta consulta devolverá solo las filas que pertenecen a las zonas horarias Este y Montaña.
Por último, consideremos un escenario en el que queremos calcular el salario promedio en función de la zona horaria.
Aquí hay una consulta de ejemplo que demuestra cómo lograr esto:
SELECT AVG(Salario) AS SalarioPromedio,
ZonaHoraria = CASE
WHEN Estado IN ('WA', 'OR', 'NE', 'CO') THEN 'Pacífico'
WHEN Estado IN ('NY', 'NJ', 'VT', 'ME', 'NH', 'MA', 'RI', 'CT', 'PA', 'DE', 'MD', 'DC', 'VA', 'WV', 'MI', 'IN', 'OH', 'KY', 'NC', 'GA', 'FL') THEN 'Este'
WHEN Estado IN ('MT', 'ID', 'WY', 'UT', 'CO', 'AZ', 'NM') THEN 'Montaña'
WHEN Estado IN ('ND', 'SD', 'NE', 'KS', 'OK', 'TX', 'MN', 'IA', 'MO', 'AR', 'LA', 'WI', 'IL', 'TN', 'MS', 'AL') THEN 'Central'
WHEN Estado = 'AK' THEN 'Alaska'
WHEN Estado = 'HA' THEN 'Hawái'
END
FROM Emp
GROUP BY CASE
WHEN Estado IN ('WA', 'OR', 'NE', 'CO') THEN 'Pacífico'
WHEN Estado IN ('NY', 'NJ', 'VT', 'ME', 'NH', 'MA', 'RI', 'CT', 'PA', 'DE', 'MD', 'DC', 'VA', 'WV', 'MI', 'IN', 'OH', 'KY', 'NC', 'GA', 'FL') THEN 'Este'
WHEN Estado IN ('MT', 'ID', 'WY', 'UT', 'CO', 'AZ', 'NM') THEN 'Montaña'
WHEN Estado IN ('ND', 'SD', 'NE', 'KS', 'OK', 'TX', 'MN', 'IA', 'MO', 'AR', 'LA', 'WI', 'IL', 'TN', 'MS', 'AL') THEN 'Central'
WHEN Estado = 'AK' THEN 'Alaska'
WHEN Estado = 'HA' THEN 'Hawái'
END;
Esta consulta calculará el salario promedio para cada zona horaria.
En conclusión, hemos explorado el uso de las funciones CASE en consultas de SQL Server. Hemos visto cómo utilizar las funciones CASE en cláusulas como group by para realizar diversas operaciones basadas en condiciones específicas. Comprender y utilizar las funciones CASE puede mejorar en gran medida la flexibilidad y el poder de sus consultas de SQL.