You are on page 1of 3

hermosaprogramacion.

com

http://www.hermosaprogramacion.com/2014/06/mysql-sqlserver-case/

Qu hace la Sentencia Case en SQL?


James
Revelo

La sentencia case de SQL es una estructura condicional que ejecuta ciertas instrucciones dependiendo de la
validez de alguna expresin. Normalmente se usa cuando surgen mltiples condiciones donde se compara una
expresin con una constante literal. Por lo que se considera una alternativa a la sentencia if en estos casos.

En que momento s que debo usar la sentencia CASE?


Cuando deseas comparar una expresin con varios casos especficos, donde cada caso tomar un rumbo
distinto. Seria como decir: "Se cumple el caso 1?no?, entonces se cumple el caso 2?no?,, se cumple el
ensimo caso?no?. Si se cumple un caso, entonces se ejecutan las instrucciones dadas y termina el case.

Como implemento la sentencia CASE?


Depende!, la sentencia CASE posee dos formas de ser escrita en SQL. La primer forma es un estilo "simple",
donde el objetivo es comparar una expresin con una serie de constantes literales hasta que dicha expresin
coincida en algn caso para poder ejecutar las sentencias. Veamos como implementarla en Sql Server y Myqsl:
Sql Server:
CASE <expresin_de_entrada>
WHEN <valor1> THEN <resultado1>
WHEN <valor2> THEN <resultado2>
...
WHEN <valorN> THEN <resultadoN>
ELSE <resultadoX>
END
Mysql
CASE <expresin_de_entrada>
WHEN <valor1> THEN
intrucciones
WHEN <valor2> THEN
instrucciones
...
WHEN <valorN> THEN
instrucciones
ELSE
instrucciones
END CASE;
Sql Server restringe la aplicacin de la estructura CASE a que se ejecute dentro de sentencias SELECT, UPDATE,
SET, etc. Pero no es permitido ejecutar la estructura individualmente como hacamos con IFELSE.
Adicionalmente cada caso retorna un solo valor preestablecido.
En MySQL la sentencia CASE tiene alcances distintos. Este gestor permite que la estructura condicional se ejecute

independientemente sin tener que apoyarse en otras sentencias. Adems cada vez que se cumple una condicin
podemos ejecutar varias instrucciones y no solo devolver un valor como lo hace SQL Server.

Podras usar un ejemplo para aclararlo?


Por supuesto!, consideremos el siguiente enunciado:
Los clientes de una compaa tienen asignado un atributo llamado prioridad, que hace referencia al volumen de
sus compras totales en un periodo de tiempo. Existen 3 niveles de prioridad: ALTO, MEDIO y BAJO. Donde cada
uno es representado por su inicial A, M y B respectivamente. Muestre el nombre completo de cada prioridad
segn sea la letra que posea cada cliente.
Veamos la solucin en MySQL y SQL Server:
Sql Server:
SELECT CASE PRIORIDAD
WHEN 'A' THEN 'ALTO'
WHEN 'M' THEN 'MEDIO'
WHEN 'B' THEN 'BAJO'
ELSE 'NN'
END
FROM CLIENTE
Mysql
CASE PRIORIDAD
WHEN 'A' THEN
SELECT 'ALTO';
WHEN 'M' THEN
SELECT 'MEDIO';
WHEN 'B' THEN
SELECT 'BAJO';
ELSE
SELECT 'NN';
END CASE;
En SQL Server debemos embeber el case dentro de una sentencia SELECT para poder usarlo. En cambio en
MySQL podemos usarlo individualmente similar a lenguajes procedurales como C++ o Java.

Dices que hay otra forma de usar la sentencia CASE, cual es?
Se le llama case de bsqueda. Su estructura cambia pero cumple exactamente las mismas funciones. Esta vez
los condicionales no sern literales, si no expresiones condicionales formadas por operadores de comparacin y
operadores lgicos. Miremos un ejemplo:
Suponga que existe una variable llamada totalVentas, la cual contiene el total acumulado de todas las ventas
hechas por un vendedor de su compaa en el mes actual. Si el vendedor obtuvo entre 1000 y 2000 dolares,
asignele una comisin del 2% de las ventas a su salario. Si vendi entre 2001 y 3000 dolares, asignele
una comisin del 3% y si vendi mas de 3001 dolares, asignele una comisin del 7%.Usaremos la sentencia
CASE de bsqueda para representar esos 3 casos. Construiremos cada caso con el operador BETWEEN o algn
operador de comparacin.
Solucin en Sql Server:
UPDATE VENDEDOR

SET SALARIO = CASE


WHEN @totalVentas BETWEEN 1000 AND 2000 THEN
SALARIO + @totalVentas * 0.02
WHEN @totalVentas BETWEEN 2001 AND 3000 THEN
SALARIO + @totalVentas * 0.03
WHEN @totalVentas >=3001 THEN
SALARIO +@totalVentas * 0.07
END
Solucin en Mysql
CASE
WHEN totalVentas BETWEEN 2000 AND 3000
UPDATE VENDEDOR
SET SALARIO = SALARIO + totalVentas *
WHEN totalVentas BETWEEN 2001 AND 3000
UPDATE VENDEDOR
SET SALARIO = SALARIO + totalVentas *
WHEN totalVentas >=3001 THEN
UPDATE VENDEDOR
SET SALARIO = SALARIO + totalVentas *
END CASE;

THEN
0.02;
THEN
0.03;

0.07;

Como notas, ya no usamos una expresin de entrada luego de la palabra CASE, simplemente ubicamos cada
condicin compuesta despus del WHEN y enseguida ubicamos lo que deseamos hacer en caso de cumplirse.
Para Sql Server el CASE de bsqueda debe estar inmiscuido dentro de una sentencia, en este caso era la
sentencia UPDATE. En cambio para MySQL, puede presentarse de forma individual, adems de que podemos
usar distintos tipos de instruccin luego del THEN.

You might also like