SQL Case: Expresión de flujo de control

La declaración lógica en SQL CASE es una expresión de flujo de control que le permite agregar lógica if Else a una consulta. En términos generales, puede usar la declaración en cualquier lugar que permita una expresión válida, por ejemplo, con las cláusulas  SELECT, UPDATE, DELETE, WHERE, ORDER BY o HAVING.

La expresión SQL case pasa por cada condición y devuelve un valor cuando se cumple la primera condición. Una vez que una condición es verdadera, CASE devolverá el resultado indicado. Si ninguna condición es verdadera, devolverá el valor de la cláusula ELSE. Si no hay ELSE y ninguna condición es verdadera, devuelve NULL.

Sintaxis de la expresión SQL case

El uso de la expresión SQL CASE es posible de 2 maneras diferentes:

  • Comparar una columna con un posible conjunto de resultados
  • Cree una serie de condiciones booleanas para determinar un resultado

Comparar una columna con un conjunto de resultados

Esta es la sintaxis necesaria para comparar una columna con un conjunto de registros:

CASE 
       WHEN 1 THEN 'Uno'
       WHEN 2 THEN 'Dos'
       WHEN 3 THEN 'Tres'
       ELSE 'Cuatro'
END

En este ejemplo, los valores contenidos en la columna «a» se comparan con 1, 2 o 3. Si la condición es verdadera, se devolverá el valor ubicado después de THEN.

Nota: la condición ELSE es opcional y sirve como recolector de basura. Si no se respetan las condiciones anteriores será el valor del ELSE el que se devolverá por defecto.

sql case

Cree una serie de condiciones booleanas para determinar un resultado

Es posible establecer condiciones más complejas para recuperar un resultado u otro. Esto se puede hacer utilizando la siguiente sintaxis:

CASE 
     WHEN a=b THEN 'A igual a B'
     WHEN a>b THEN 'A superio a B'
     ELSE 'A es inferior a B'
END

En este ejemplo, las columnas «a», «b» y «c» pueden contener valores numéricos. Cuando se respetan, las condiciones booleanas permiten entrar en una u otra de las condiciones.

Es posible reproducir el primer ejemplo presentado en esta página usando la siguiente sintaxis:

CASE 
       WHEN a=1 THEN 'uno'
       WHEN a=2 THEN 'dos'
       WHEN a=3 THEN 'tres'
       ELSE 'cuatro'
END

Ejemplo de la expresión SQL case

Consideremos dos tablas para ejemplos de declaraciones SQL Case:

Tabla “Empleado”:

Emp_id nombre calle ciudad contact Salario id_depto
101 jone althan surat 1111111 20000 10001
102 cartín udhna surat 2222222 15000 20001
103 kris ajava Vadodara 3333333 30000 20001
104 dhiru ramanagar Vadodara 8888888 36000 30001
105 om althan surat 7777777 22000 30001
106 Adi vesu Navsari 2323232 35000 10001
107 anuncio shivnagar Navsari 5555555 34000 10002
108 yogui althan surat 8989898 25000 10002
109 almizcleño vesu Vadodara 9999999 18000 10001
110 rudra Kashi Hazira 1212121 31000 20001

 

Tabla “Departamento”:

id_depto nombre_depto ubicación
10001 Cuenta surat
20001 Ventas Hazira
30001 Finanzas Vadodara
10002 Marketing surat

Ejemplo-1: SQL case con el comando Select

Use la instrucción SQL Case con la consulta SELECT para buscar y mostrar el mensaje de » Salario mayor que 20000 ‘ con emp_id

SELECT Emp_id, Salario,
CASE WHEN Salario > 20000 THEN 'El salario es mayor a 20000' 
WHEN Salario = 20000 THEN 'El salario es 20000'
ELSE 'el salario es inferior a 20000'
END AS 'Salario'
FROM Empleado;

En la consulta de declaración de caso anterior con el comando SELECT, se devolverán los emp_id detalles del salario con un texto como monto del salario, que es un valor de resultado de la expresión condicional de Salario> 20000, Salario = 2000.

RESULTADOS

Emp_id Salario
101 20000
102 15000
103 30000
104 36000
105 22000
106 35000
107 34000
108 25000
109 18000
110 31000

Ejemplo-2: SQL case con cláusula Order by

Podemos aplicar la cláusula sql Order by con el comando SELECT en la declaración SQL Case ordenará el valor del resultado en orden ascendente o descendente. Extraiga los datos de los empleados con la identificación del departamento y el nombre del departamento, donde el nombre del departamento será el valor resultante en función de la condición del caso en el orden de dept_id, ejecútelo utilizando la instrucción SQL Case.

SELECT Emp_id, Emp_name,  
CASE Dept_id  
WHEN '10001' THEN 'CUENTA'  
WHEN '10002' THEN 'Marketing'  
ELSE 'Departmento no encontrado'  
END AS Department 
FROM empleado 
ORDER BY Dept_id;
  • La consulta SQL anterior usó una declaración de caso con el comando SELECT que da nombre a cada dept_id y también hemos puesto la cláusula ORDER BY para mostrar el resultado en orden de ID de departamento.

Resultados

Emp_id Emp_nombre nombre_depto
101 jone Cuenta
102 cartín Ventas
103 kris Ventas
104 dhiru Finanzas
105 om Finanzas
106 Adi Cuenta
107 anuncio Marketing
108 yogui Marketing
109 almizcleño  Cuenta
110 rudra Ventas

 

Ejemplo-3: SQL CASE buscada con el comando SELECT

En el siguiente ejemplo, estamos recuperando la identificación y el nombre del empleado y también usamos la declaración SQL Case buscada para dar la designación del empleado en función del valor de la expresión buscada.

SELECT Emp_id, Emp_name,  
CASE WHEN Salario = 20000 THEN 'Analista'  
WHEN Salario = 30000 THEN 'administrador'  
WHEN Salario = 35000 THEN 'Director'  
WHEN Salario = 25000 THEN 'cueta'  
WHEN Salario < 20000 THEN 'personal de oficina'  
ELSE 'Designación no encontrada' 
END AS Designación 
FROM empleado;

En la consulta anterior, le damos la designación al empleado en función del valor del salario para el que usamos la declaración SQL Case buscada.

 SQL case con instrucción UPDATE

La declaración SQL Case también se puede usar con el comando SQL Update para modificar el valor de columna de las filas. El uso de CASE junto con una instrucción SQL UPDATE permite a los desarrolladores modificar condicionalmente grandes cantidades de datos mediante una única instrucción SQL.

Sintaxis: 

UPDATE Tabla  
set columna1= CASE columna2
WHEN expresión THEN resultado
WHEN expresión THEN resultado
... 
ELSE resultado
END

Considere el siguiente ejemplo de declaración SQL Case dentro del comando Actualizar:

Modificar el aumento del salario del empleado según el departamento en el que trabaja el empleado, el empleado del departamento de cuentas obtiene un incremento del 2 %, el departamento de marketing obtiene un incremento del 3 %, el departamento de ventas con un 1 % y el departamento de finanzas otorga un incremento del 4 %, actualice los registros de empleados de la tabla usando la declaración SQL Update con la expresión Case.

UPDATE  tblemp 
SET Salario =  
CASE Dept_id  
WHEN 10001 THEN Salario * 1.02  
WHEN 10002 THEN Salario * 1.03  
WHEN 20001 THEN Salario * 1.01  
WHEN 30001 THEN Salario * 1.04  
ELSE NULL  
END
  • Cuando ejecutamos la consulta anterior, muestra un mensaje como ’10 filas afectadas por la última consulta’.
  • Para verificar el resultado de la declaración de actualización anterior, debemos usar la consulta de selección para obtener datos.

Resumen

La instrucción CASE es útil cuando desea implementar la lógica IF-THEN en SQL Server. En este artículo, vimos qué es la instrucción lógica CASE junto con su sintaxis. También vimos diferentes ejemplos de la declaración CASE junto con la cláusula SELECT, WHERE, ORDER BY y GROUP BY.

Puede anidar CASE dentro de otro CASE para lógica más compleja. Además, asegúrese de manejar adecuadamente los valores NULL y considere el impacto en el rendimiento. 

Deja un comentario