Guía Completa sobre la Cláusula CASE en SQL: Conceptos y Ejemplos Prácticos

La cláusula CASE en SQL es una herramienta poderosa que permite manejar la lógica condicional directamente en consultas SQL. Es similar a un “if-else” en programación.

Estructura Básica

sql
CASE 
  WHEN condición THEN resultado
  [WHEN condición_adicional THEN resultado_adicional]
  [ELSE resultado_predeterminado]
END
  • CASE: Inicia la cláusula, indicando que se va a evaluar una serie de condiciones.
  • WHEN condición THEN resultado: Cuando [se cumpla la condición], entonces [devuelve el resultado].
  • [WHEN condición_adicional THEN resultado_adicional]: Cuando [se cumpla otra condición adicional], entonces [devuelve el resultado adicional]. (Esto es opcional y se puede repetir varias veces).
  • ELSE: Si ninguna de las condiciones anteriores se cumple, entonces [devuelve el resultado predeterminado]. (Esto también es opcional).
  • END: Finaliza la cláusula CASE.

Ejemplos Prácticos


1. Clasificación de estudiantes según su calificación

Tabla: estudiantes

idnombrecalificacion
1Ana85
2Luis60
3María45

Consulta:

sql
SELECT 
  nombre, 
  calificacion,
  CASE 
      WHEN calificacion >= 75 THEN 'Excelente'
      WHEN calificacion >= 50 THEN 'Regular'
      ELSE 'Deficiente'
  END AS categoria
FROM estudiantes;

Resultado:

nombrecalificacioncategoria
Ana85Excelente
Luis60Regular
María45Deficiente

2. Asignar descuentos según el precio del producto

Tabla: productos

idproductoprecio
1Manzana100
2Plátano30
3Sandía200

Consulta:

sql
SELECT 
  producto, 
  precio,
  CASE 
      WHEN precio > 150 THEN '15% de descuento'
      WHEN precio BETWEEN 50 AND 150 THEN '10% de descuento'
      ELSE 'Sin descuento'
  END AS descuento
FROM productos;

Resultado:

productopreciodescuento
Manzana10010% de descuento
Plátano30Sin descuento
Sandía20015% de descuento

3. Determinar el horario según la hora de entrada

Tabla: empleados

idnombrehora_entrada
1Juan08:00
2Pedro14:00
3Sofía22:00

Consulta:

sql
SELECT 
  nombre, 
  hora_entrada,
  CASE 
      WHEN hora_entrada < '12:00' THEN 'Turno Mañana'
      WHEN hora_entrada < '18:00' THEN 'Turno Tarde'
      ELSE 'Turno Noche'
  END AS turno
FROM empleados;

Resultado:

nombrehora_entradaturno
Juan08:00Turno Mañana
Pedro14:00Turno Tarde
Sofía22:00Turno Noche

4. Calcular impuestos basados en ingresos

Tabla: personas

idnombreingresos
1Andrés50000
2Clara150000
3Miguel250000

Consulta:

sql
SELECT 
  nombre, 
  ingresos,
  CASE 
      WHEN ingresos <= 100000 THEN ingresos * 0.05
      WHEN ingresos <= 200000 THEN ingresos * 0.10
      ELSE ingresos * 0.15
  END AS impuestos
FROM personas;

5. Evaluar stock de productos

Tabla: inventario

idproductostock
1Lápiz5
2Cuaderno20
3Borrador0

Consulta:

sql
SELECT 
  producto, 
  stock,
  CASE 
      WHEN stock = 0 THEN 'Sin stock'
      WHEN stock < 10 THEN 'Pocas unidades'
      ELSE 'Stock suficiente'
  END AS estado_stock
FROM inventario;

6. Mostrar estado de pedidos según fecha de entrega

Tabla: pedidos

idclientefecha_entrega
1Laura2024-11-29
2Carlos2024-12-01
3DianaNULL

Consulta:

sql
SELECT 
  cliente, 
  fecha_entrega,
  CASE 
      WHEN fecha_entrega IS NULL THEN 'Pendiente'
      WHEN fecha_entrega > CURDATE() THEN 'En proceso'
      ELSE 'Entregado'
  END AS estado
FROM pedidos;

7. Asignar mensajes personalizados en un reporte

Tabla: reporte

idcategoriavalor
1A50
2B75
3C100

Consulta:

sql
SELECT 
  categoria, 
  valor,
  CASE categoria
      WHEN 'A' THEN 'Bajo rendimiento'
      WHEN 'B' THEN 'Rendimiento aceptable'
      WHEN 'C' THEN 'Rendimiento excelente'
  END AS mensaje
FROM reporte;

8. Categorizar empleados según experiencia

Tabla: empleados

idnombreaños_experiencia
1Diego2
2Lucía5
3Fernando10

Consulta:

sql
SELECT 
  nombre, 
  años_experiencia,
  CASE 
      WHEN años_experiencia < 3 THEN 'Principiante'
      WHEN años_experiencia BETWEEN 3 AND 7 THEN 'Intermedio'
      ELSE 'Avanzado'
  END AS nivel_experiencia
FROM empleados;

Resultado:

nombreaños_experiencianivel_experiencia
Diego2Principiante
Lucía5Intermedio
Fernando10Avanzado

9. Asignar categoría a productos según tamaño

Tabla: productos

idproductotamaño
1Laptop14
2Televisor32
3Refrigerador60

Consulta:

sql
SELECT 
  producto, 
  tamaño,
  CASE 
      WHEN tamaño <= 15 THEN 'Pequeño'
      WHEN tamaño <= 50 THEN 'Mediano'
      ELSE 'Grande'
  END AS categoria_tamaño
FROM productos;

Resultado: Clasificación de Productos por Tamaño

productotamañocategoria_tamaño
Laptop14Pequeño
Televisor32Mediano
Refrigerador60Grande

10. Evaluar rendimiento de ventas mensual

Tabla: ventas

idvendedorventas_mes
1Urian50
2Brenda200
3Uriany350
sql
SELECT 
  vendedor, 
  ventas_mes,
  CASE 
      WHEN ventas_mes < 100 THEN 'Bajo'
      WHEN ventas_mes BETWEEN 100 AND 300 THEN 'Medio'
      ELSE 'Alto'
  END AS rendimiento
FROM ventas;

Resultado: Rendimiento de Vendedores

vendedorventas_mesrendimiento
Urian50Bajo
Brenda200Medio
Uriany350Alto
  Conclusión

La cláusula CASE es increíblemente versátil y puede aplicarse en diversas situaciones para simplificar el manejo de lógica condicional en consultas SQL.