SQL

Expresión CASE de SQL Server

Estrada Web Group
Estrada Web Group
Expresión CASE de SQL Server

Resumen: en este tutorial, aprenderás a usar la expresión CASE de SQL Server para agregar lógica if-else a consultas SQL.

Introducción a la expresión CASE

La expresión CASE de SQL Server evalúa una lista de condiciones y devuelve uno de los múltiples resultados especificados. La expresión CASE tiene dos formatos: expresión CASE simple y expresión CASE buscada. Ambos formatos de expresión CASE admiten una instrucción ELSE opcional.

Debido a que CASE es una expresión, puedes usarla en cualquier cláusula que acepte una expresión como SELECT, WHERE, GROUP BY y HAVING.

Expresión CASE simple de SQL Server

A continuación, se muestra la sintaxis de la expresión CASE simple:

CASE input   
    WHEN e1 THEN r1
    WHEN e2 THEN r2
    ...
    WHEN en THEN rn
    [ ELSE re ]   
END  

La expresión CASE simple compara la expresión de entrada (input) con una expresión (ei) en cada cláusula WHEN. Si el valor de input es igual a una expresión (ei) en la cláusula WHEN, se devuelve el resultado (r1, r2 o rn) en la cláusula THEN correspondiente.

Si la expresión de entrada no es igual a ninguna expresión y la cláusula ELSE está disponible, la expresión CASE devolverá el resultado en la cláusula ELSE (re).

En caso de que se omita la cláusula ELSE y la expresión de entrada no sea igual a ninguna expresión en la cláusula WHEN, la expresión CASE devolverá NULL.

A) Usando la expresión CASE simple en la cláusula SELECT

Consulta la siguiente tabla sales.orders de la base de datos de muestra:

expresión CASE

Este ejemplo usa la función COUNT() con la cláusula GROUP BY para devolver el número de pedidos para el estado de cada pedido:

SELECT    
    order_status,
    COUNT(order_id) order_count
FROM    
    sales.orders
WHERE
    YEAR(order_date) = 2018
GROUP BY
    order_status;

Resultado:

select case

Los valores de la columna order_status son números, lo que no tiene sentido en este caso. Para que el resultado sea más comprensible, puedes usar la expresión CASE simple como se muestra en la siguiente consulta:

SELECT    
    CASE order_status
        WHEN 1 THEN 'Pending'
        WHEN 2 THEN 'Processing'
        WHEN 3 THEN 'Rejected'
        WHEN 4 THEN 'Completed'
    END AS order_status,
    COUNT(order_id) order_count
FROM    
    sales.orders
WHERE
    YEAR(order_date) = 2018
GROUP BY
    order_status;

Resultado:

Instrucción SELECT CASE

B) Uso de la expresión CASE simple con una función agregada

Consulta el código siguiente:

SELECT    
    SUM(CASE
            WHEN order_status = 1
            THEN 1
            ELSE 0
        END) AS 'Pending',
    SUM(CASE
            WHEN order_status = 2
            THEN 1
            ELSE 0
        END) AS 'Processing',
    SUM(CASE
            WHEN order_status = 3
            THEN 1
            ELSE 0
        END) AS 'Rejected',
    SUM(CASE
            WHEN order_status = 4
            THEN 1
            ELSE 0
        END) AS 'Completed',
    COUNT(*) AS Total
FROM    
    sales.orders
WHERE
    YEAR(order_date) = 2018;

Resultado:

Select CASE instrucción

En este ejemplo:

  • Primero, la condición en la cláusula WHERE incluye la orden de venta solo del 2018.
  • En segundo lugar, la expresión CASE devuelve 1 o 0 según el estado del pedido.
  • En tercer lugar, la función SUM() suma el número de pedidos para cada estado del pedido.
  • Cuarto, la función COUNT() devuelve el total de pedidos.

Expresión CASE buscada de SQL Server

A continuación, se muestra la sintaxis de la expresión CASE buscada:

CASE  
    WHEN e1 THEN r1
    WHEN e2 THEN r2
    ...
    WHEN en THEN rn
    [ ELSE re ]   
END

En esta sintaxis:

  • e1, e2, …ei, … o en son expresiones booleanas.
  • r1, r2, …ri,… o rn es uno de los posibles resultados.

La expresión CASE buscada evalúa la expresión booleana en cada cláusula WHEN en el orden especificado y devuelve el resultado (ri) si la expresión booleana (ei) se evalúa como TRUE.

Si ninguna expresión booleana se evalúa como TRUE, la expresión CASE buscada devuelve el resultado (re) en la cláusula ELSE o NULL si no se especifica la cláusula ELSE.

A) Usar la expresión CASE buscada en la cláusula SELECT

Consulta las siguientes tablas sales.orders y sales.order_items de la base de datos de ejemplo:

ejemplo select case de sql server

La siguiente instrucción utiliza la expresión CASE buscada para clasificar el pedido de ventas por valor de pedido:

SELECT    
    o.order_id,
    SUM(quantity * list_price) order_value,
    CASE
        WHEN SUM(quantity * list_price) <= 500
            THEN 'Very Low'
        WHEN SUM(quantity * list_price) > 500 AND
            SUM(quantity * list_price) <= 1000
            THEN 'Low'
        WHEN SUM(quantity * list_price) > 1000 AND
            SUM(quantity * list_price) <= 5000
            THEN 'Medium'
        WHEN SUM(quantity * list_price) > 5000 AND
            SUM(quantity * list_price) <= 10000
            THEN 'High'
        WHEN SUM(quantity * list_price) > 10000
            THEN 'Very High'
    END order_priority
FROM    
    sales.orders o
INNER JOIN sales.order_items i ON i.order_id = o.order_id
WHERE
    YEAR(order_date) = 2018
GROUP BY
    o.order_id;

Resultado:

sql server case

En este tutorial, aprendiste a usar la expresión CASE de SQL Server para agregar lógica if-else a las consultas SQL.

Compartir artículo:

Más artículos geniales

¿Cómo agregar una columna a una tabla en SQL?

¿Cómo agregar una columna a una tabla en SQL?

En este post veremos cómo agregar, eliminar y cambiar columnas a una tabla en SQL Server. ¿Cómo agregar una columna a una tabla existente en SQL Server?

Ver artículo completo
Función ROW_NUMBER de SQL Server para asignar un numérico secuencial

Función ROW_NUMBER de SQL Server para asignar un numérico secuencial

Resumen: en este tutorial, aprenderás a usar la función ROW_NUMBER() de SQL Server para asignar un entero secuencial a cada fila de un conjunto de resultados.

Ver artículo completo
Tipo de datos Decimal y Numeric de SQL Server

Tipo de datos Decimal y Numeric de SQL Server

Resumen: en este tutorial, aprenderás sobre el tipo de datos DECIMAL de SQL Server y cómo usarlo para almacenar valores numéricos exactos.

Ver artículo completo

Manténgase actualizado

Obtenga excelente contenido en su bandeja de entrada todas las semanas.
Solo contenido excelente, no compartimos su correo electrónico con terceros.
Subir al inicio de la pantalla