La declaración case en SQL Server es una herramienta poderosa que te permite devolver un valor basado en una condición especificada. Puede ser utilizada en consultas select, declaraciones insert e incluso en combinación con otras cláusulas como Where, Order By y Group By. En este artículo, exploraremos los diversos casos de uso de la declaración case y cómo puede mejorar tus consultas SQL.
Declaración Case Simple
Una declaración case simple en SQL Server evalúa una expresión contra múltiples valores. Funciona evaluando las condiciones una por una y devolviendo el valor correspondiente especificado en la cláusula THEN. Consideremos un ejemplo donde tenemos una tabla que almacena IDs de productos y queremos recuperar el nombre del producto para un ID específico:
SELECT
CASE ProductID
WHEN 1 THEN 'Producto A'
WHEN 2 THEN 'Producto B'
WHEN 3 THEN 'Producto C'
ELSE 'Desconocido'
END AS NombreProducto
FROM
Productos
WHERE
ProductID = 1;
En este ejemplo, utilizamos la declaración case para verificar el valor de la columna ProductID. Si coincide con alguno de los valores especificados, devuelve el nombre del producto correspondiente. Si ninguna de las condiciones se cumple, devuelve ‘Desconocido’.
Declaración Case con Operador de Comparación
Además de utilizar valores específicos, la declaración case en SQL Server también puede evaluar condiciones utilizando operadores de comparación. Esto te permite realizar evaluaciones más complejas y devolver diferentes resultados según el resultado. Consideremos un ejemplo donde queremos determinar la designación de los empleados basada en su salario:
SELECT
NombreEmpleado,
CASE
WHEN Salario >= 80000 AND Salario <= 100000 THEN 'Director'
WHEN Salario >= 50000 AND Salario < 80000 THEN 'Consultor Senior'
ELSE 'Desconocido'
END AS Designación
FROM
Empleados;
En este ejemplo, utilizamos la declaración case para verificar el salario de cada empleado. Dependiendo del rango salarial, asignamos una designación específica. Si el salario se encuentra dentro de un rango determinado, devuelve la designación correspondiente. Si ninguna de las condiciones se cumple, devuelve ‘Desconocido’.
Declaración Case con Cláusula Order By
La declaración case en SQL Server también puede ser utilizada en combinación con la cláusula Order By para ordenar los resultados en un orden específico. Consideremos un ejemplo donde queremos ordenar los salarios de los empleados femeninos en orden descendente y los salarios de los empleados masculinos en orden ascendente:
SELECT
NombreEmpleado,
Género,
Salario
FROM
Empleados
ORDER BY
CASE
WHEN Género = 'F' THEN Salario
END DESC,
CASE
WHEN Género = 'M' THEN Salario
END ASC;
En este ejemplo, utilizamos la declaración case para definir las condiciones de ordenamiento. Especificamos que para los empleados femeninos, los salarios deben ser ordenados en orden descendente, y para los empleados masculinos, los salarios deben ser ordenados en orden ascendente.
Declaración Case con Cláusula Group By
La declaración case en SQL Server también puede ser utilizada con la cláusula Group By para agrupar datos basados en condiciones específicas. Consideremos un ejemplo donde queremos agrupar empleados basados en su rango salarial y calcular el salario mínimo y máximo para cada grupo:
SELECT
CASE
WHEN Salario >= 80000 AND Salario <= 100000 THEN 'Director'
WHEN Salario >= 50000 AND Salario < 80000 THEN 'Consultor Senior'
ELSE 'Desconocido'
END AS Designación,
MIN(Salario) AS SalarioMínimo,
MAX(Salario) AS SalarioMáximo
FROM
Empleados
GROUP BY
CASE
WHEN Salario >= 80000 AND Salario <= 100000 THEN 'Director'
WHEN Salario >= 50000 AND Salario < 80000 THEN 'Consultor Senior'
ELSE 'Desconocido'
END;
En este ejemplo, utilizamos la declaración case para determinar la designación de cada empleado basada en su rango salarial. Luego agrupamos a los empleados basados en su designación y calculamos el salario mínimo y máximo para cada grupo.
Declaración Case en Declaración Update
La declaración case en SQL Server también puede ser utilizada en combinación con la declaración Update para actualizar datos en una tabla basada en condiciones específicas. Consideremos un ejemplo donde queremos actualizar el código de estado de los empleados basado en ciertas condiciones:
UPDATE Empleados
SET CódigoEstado =
CASE
WHEN CódigoEstado = 'AR' THEN 'FL'
WHEN CódigoEstado = 'GE' THEN 'AL'
ELSE 'IN'
END;
En este ejemplo, utilizamos la declaración case para verificar el código de estado actual de cada empleado. Dependiendo del código de estado, lo actualizamos a un nuevo valor. Si el código de estado es ‘AR’, se actualiza a ‘FL’. Si el código de estado es ‘GE’, se actualiza a ‘AL’. Para todos los demás códigos de estado, se actualiza a ‘IN’.
Declaración Case en Declaración Insert
La declaración case en SQL Server también puede ser utilizada en combinación con la declaración Insert para insertar datos en una tabla basada en condiciones específicas. Consideremos un ejemplo donde queremos insertar datos de empleados en una tabla y asignar el valor de género apropiado:
DECLARE @NombreEmpleado VARCHAR(100)
DECLARE @Género INT
DECLARE @CódigoEstado CHAR(2)
DECLARE @Salario MONEY
SET @NombreEmpleado = 'John'
SET @Género = 0
SET @CódigoEstado = 'FL'
SET @Salario = 52000
INSERT INTO Empleados
VALUES (
@NombreEmpleado,
CASE
WHEN @Género = 0 THEN 'M'
WHEN @Género = 1 THEN 'F'
END,
@CódigoEstado,
@Salario
);
En este ejemplo, utilizamos la declaración case para verificar el valor de la variable @Género. Dependiendo del valor, insertamos el valor de género apropiado en la tabla. Si la variable @Género es 0, se inserta ‘M’. Si la variable @Género es 1, se inserta ‘F’.
Limitaciones de la Declaración Case
Aunque la declaración case en SQL Server es una herramienta poderosa, tiene algunas limitaciones. No puede controlar el flujo de ejecución de procedimientos almacenados o funciones. También funciona en un modelo secuencial, lo que significa que una vez que se satisface una condición, deja de verificar condiciones adicionales. Además, no se puede utilizar para verificar valores NULL en una tabla.
Conclusión
La declaración case en SQL Server proporciona flexibilidad y versatilidad al escribir consultas t-SQL para consultas DDL y DML. Te permite devolver valores basados en condiciones específicas, realizar evaluaciones complejas, ordenar resultados, agrupar datos e incluso actualizar o insertar datos en tablas. Al comprender y utilizar eficazmente la declaración case, puedes mejorar tus consultas SQL y lograr resultados más precisos y eficientes.