CASE: Evaluando condiciones
La expresión CASE se utiliza para evaluar
condiciones
y de acuerdo a esto devolver un resultado, y se completa para su formato
DE BÚSQUEDA con una sintaxis de la forma:
CASE
expresión WHEN
expresión de comparación THEN
resultado afirmativo ELSE
resultado en caso contrario END
Donde la
expresión es cualquiera expresión sencilla evaluada con
operadores,
y
expresión de comparación es un resultado posible de
expresión, que de cumplirse obtenemos el
resultado afirmativo, en cambio si no se cumple obtendremos el
resultado del ELSE, veamos un ejemplo de como se escribe:
SELECT
CASE WHEN nota >= 6 THEN 'si' ELSE 'no' END as [aprueba]
FROM
[alumnos]
Explicado en un lenguaje más coloquial sería en CASO de que se cumpla la expresión
nota >= 6 ENTONCES el resultado será 'si' EN CASO CONTRARIO sera
igual
a 'no' y luego FIN de la instrucción.
El argumento ELSE es opcional, pudiendo no estar presente, para lo cual la sintaxis se acorta a:
SELECT
CASE WHEN nota >= 6 THEN 'si' END as [aprueba]
FROM
[alumnos]
forma de la cual en caso de no ser
mayor
o
igual
a 6 la nota, el valor del campo APRUEBA será NULL.
La expresión CASE se puede escribir de dos formas posibles, la primera,
SIMPLE, como describimos al comienzo de este artículo:
1) CASE de formato SIMPLE 2) CASE de formato BÚSQUEDA El
formato SIMPLE permite unicamente comprobar con una igualdad, respecto del valor de un campo, llamado valor de entrada, veremos un ejemplo
donde
tomamos el número del día de la semana, y su sintaxis es:
SELECT
CASE dia_semana
WHEN 1 THEN 'domingo'
WHEN 7 THEN 'sábado'
ELSE 'día hábil'
END as [jornada]
FROM
[días trabajados]
El
formato DE BÚSQUEDA se realiza buscando la primer comparación exitosa, en el orden propuesto dentro de la sentencia, y permite utilizar cualquier tipo de expresión con los
operadores
conocidos, y su sintaxis es como ya vimos al comienzo, aquí otro ejemplo:
SELECT
CASE WHEN nota < 4 THEN 'aplazado'
CASE WHEN nota < 6 THEN 'regular'
CASE WHEN nota < 8 THEN 'aprobado'
ELSE 'sobresaliente'
END as [nota final]
FROM
[alumnos]
Para el caso de CASE Simple, tambien llamado Sencillo, si no hay coincidencia entre el valor de entrada del CASE y el resto de las opciones THEN, obtendremos como resultado el valor propuesto en el ELSE.
Casi de la misma forma, para el CASE de BÚSQUEDA, si ocurridas todas las
comparaciones,
no se encuentra ninguna como resultado TRUE, se obtendrá definitivamente el valor que se encuentra en el ELSE.
CASE ANIDADOS:
las expresiones CASE se pueden anidar, se resuelven de afuera hacia adentro a medida que van ocurriendo en la consulta, y tiene la particularidad que se pueden anidar hasta 10 veces, más el CASE original, totalizando 11 tomas de decisión como máximo.
Observaciones: las expresiones CASE pueden utilizarse perfectamente también dentro de las cláusulas de ordenamiento
ORDER BY,
así como dentro de las instrucciones
UPDATE
y SET.
1) dentro de la cláusula
ORDER BY
quedaría:
SELECT
* FROM nombre_de_tabla WHERE criterio_aplicado
ORDER BY
CASE WHEN expresión THEN 0 ELSE 1 END
1) dentro de una instucción
UPDATE
quedaría:
UPDATE nombre_de_tabla SET nombre_de_campo = CASE WHEN expresión THEN valor1 ELSE valor2 END WHERE criterio_aplicado