Published on

April 4, 2007

Usando funciones CASE en SQL Server

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.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.