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_idnombrecalleciudadcontactSalarioid_depto
101jonealthansurat11111112000010001
102cartínudhnasurat22222221500020001
103krisajavaVadodara33333333000020001
104dhiruramanagarVadodara88888883600030001
105omalthansurat77777772200030001
106AdivesuNavsari23232323500010001
107anuncioshivnagarNavsari55555553400010002
108yoguialthansurat89898982500010002
109almizcleñovesuVadodara99999991800010001
110rudraKashiHazira12121213100020001

 

Tabla “Departamento”:

id_deptonombre_deptoubicación
10001Cuentasurat
20001VentasHazira
30001FinanzasVadodara
10002Marketingsurat

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_idSalario
10120000
10215000
10330000
10436000
10522000
10635000
10734000
10825000
10918000
11031000

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_idEmp_nombrenombre_depto
101joneCuenta
102cartínVentas
103krisVentas
104dhiruFinanzas
105omFinanzas
106AdiCuenta
107anuncioMarketing
108yoguiMarketing
109almizcleño Cuenta
110rudraVentas

 

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