Sei sulla pagina 1di 3

hermosaprogramacion.

com

http://www.hermosaprogramacion.com/2014/05/sql-case/

La expresin CASE en SQL


James
Revelo

La expresin condicional CASE de SQL permite manejar mltiples caminos en sentencias de bsqueda o
comparacin. Su uso es similar a otros lenguajes de programacin.
El condicional CASE busca uno a uno valores de una tabla especifica para comparar con varios casos que
pudiesen ocurrir. Dentro de cada caso establecemos el resultado a retornar para la operacin que estamos
realizando. Si por alguna razn ninguna de las condiciones se cumple la expresin CASE retornar en NULL.

CASE con condiciones de bsqueda


Cuando deseemos hacer una bsqueda en una tabla donde sus registros deben cumplir con alguna condicin
usaremos la siguiente sintaxis para manejar los casos:
CASE
WHEN condicin1 THEN resultado1
WHEN condicin2 THEN resultado2

WHEN condicinn THEN resultadon


ELSE resultadox
END
El funcionamiento es sencillo y secuencial. Se evala la primer condicin con WHEN y si se cumple obtendremos
el resultado1. Si la condicin1 no fue verdadera entonces seguidos con la condicin2 y as sucesivamente hasta
que el valor sea true. Si ningn caso fue exitoso se evala la sentencia ELSE, la cual tiene un valor por defecto.
ELSE es opcional, al no ponerse obtendramos el valor NULL.
Ejemplo 1
Asigne la calificacin a cada estudiante de acuerdo al puntaje que tuvo en su prueba. Siga el siguiente criterio para
la asignacin:
Menos de 10 puntos = Deficiente
Entre 10 y 20 puntos = Insuficiente
Entre 20 y 30 puntos = Aceptable
Entre 30 y 40 puntos = Sobresaliente
Entre 40 y 50 puntos = Excelente
UPDATE ESTUDIANTE
SET CALIFICACION = CASE
WHEN PUNTOS<10
THEN Deficiente
WHEN (PUNTOS>=10 AND PUNTOS<20)
THEN Insuficiente
WHEN (PUNTOS>=20 AND PUNTOS<30)
THEN Aceptable
WHEN (PUNTOS>=30 AND PUNTOS<40)
THEN Sobresaliente
WHEN (PUNTOS>=40 AND PUNTOS<=50)
THEN Excelente

END;

CASE con valores simples


Este tipo de CASE es mas simple que el anterior, ya que no usa una condicin lgica, si no que simplemente
compara la igualdad de un valor con una constante para determinar que expresin asignar al resultado. Veamos su
sintaxis:
CASE valort
WHEN valor1 THEN resultado1
WHEN valor2 THEN resultado2

WHEN valorn THEN resultadon


ELSE resultadox
END
El valort representa representa la expresin que vamos a comparar con cada caso creado en la sentencia CASE.
Inicialmente el SGBD preguntar si (valort = valor1), si es as entonces se devuelve el resultado1. Si no,
comenzar a comparar con el resto de valores para ver cual se cumple. Si ninguno tiene xito se devuelve el valor
por defecto de ELSE.
Ejemplo 2
Considere la siguiente tabla llamada CLIENTE:

Seleccione el NOMBRE, APELLIDO y PRIORIDAD de los clientes. Pero cambie en el resultado los valores del
atributo PRIORIDAD por: A = alto, M = medio y B = bajo.
SELECT NOMBRE, APELLIDO, CASE PRIORIDAD
WHEN A
THEN Alto
WHEN M
THEN Medio
WHEN B
THEN Bajo
END
AS PRIORIDAD
FROM CLIENTE;
Que mas puedo hacer con CASE?
Gran variedad de cosas! Por ejemplo puedes manejar excepciones producidas por operaciones matemticas

indefinidas o apariciones de valores NULL.


Supongamos que queremos calcular un bono de antigedad para los empleados de una compaa. La empresa ha
definido el clculo del bono como :
1-(1/ANTIGUEDAD)
Ahora consultaremos el cdigo, nombre y bono del empleado:
SELECT ID, NOMBRE, 1-(1 /ANTIGUEDAD)AS BONO_ANTIGUEDAD
FROM EMPLEADO;
Hasta all todo muy bien, pero que pasara si ANTIGUEDAD fuera 0? Se
producira un error de divisin por 0!
Veamos como se soluciona:
SELECT ID, NOMBRE, 1-(1 /
CASE
WHEN ANTIGUEDAD = 0
THEN 1
ELSE ANTIGUEDAD
END)

Resultados de la consulta

FROM EMPLEADO;
Como ves, introducimos el CASE justo despus del operador de divisin para manejar el resultado final del divisor.
Si ANTIGUEDAD es 0, entonces retornaremos el valor 1, lo que producira un bono del 0% del sueldo actual. Si es
diferente de 0 entonces dejaremos el valor de ANTIGUEDAD.

Potrebbero piacerti anche