Declaración CASE y caso anidado en SQL Server: ejemplo de T-SQL
ā” Resumen inteligente
CASE es una expresión condicional en SQL Server que devuelve un valor basado en la primera condición que se evalĆŗa como verdadera, ofreciendo formas simples y con bĆŗsqueda, ademĆ”s de anidamiento dentro de IFā¦ELSE, UPDATE y ORDER BY.

”Descripción general del caso en la vida real!
De nuevo, en la vida real, realizamos diferentes acciones dependiendo del resultado de distintas condiciones. Para explicarlo mejor, consideremos el siguiente ejemplo:
- Si los billetes de avión cuestan menos de 100 dólares, visitarĆ© Los Ćngeles.
- Si los billetes de avión cuestan entre 100 y 200 dólares, entonces visitaré Nueva York.
- Si los billetes de avión cuestan entre 200 y 400 dólares, entonces viajaré a Europa.
- De lo contrario, prefiero visitar algĆŗn lugar turĆstico cercano.
Consideremos categorizar la condición y la acción por separado a partir del ejemplo anterior:
| Condiciones ā Billetes de avión | Acciones realizadas solo si la condición es VERDADERA. |
| Less que $ 100 | Visita los angeles |
| Entre $ 100 a $ 200 | Visitar nueva york |
| Entre $ 200 a $ 400 | Visitar europa |
| Ninguna de las condiciones anteriores se cumplió | Punto turĆstico cercano |
En el ejemplo anterior, podemos ver que el resultado de las diferentes condiciones rige una acción separada. Por ejemplo, el visitante realizarÔ el acto de visitar Nueva York solo si el billete de avión estÔ entre $100 y $200. De manera similar, el MS SQL La instrucción CASE también ofrece la capacidad de ejecutar diferentes instrucciones T-SQL en función del resultado de diferentes condiciones.
¿Qué es la declaración CASE en SQL Server?
Declaración de CASO en SQL Server es la extensión de la SI⦠DE LO CONTRARIO A diferencia de IFā¦ELSE, donde solo se permite una condición, CASE permite al usuario aplicar mĆŗltiples condiciones para realizar diferentes acciones en MS SQL. Devuelve un valor correspondiente asociado a la condición definida por el usuario.
Aprendamos cómo usar CASE en SQL y su concepto en las siguientes secciones. En MS SQL, existen dos tipos de CASE:
- CASO sencillo
- CASO buscado
CASO sencillo
La sintaxis para el caso simple
CASE <Case_Expression> WHEN Value_1 THEN Statement_1 WHEN Value_2 THEN Statement_2 . . WHEN Value_N THEN Statement_N [ELSE Statement_Else] END AS [ALIAS_NAME]
AquĆ:
- El parÔmetro Case_Expression indica la expresión que finalmente se compararÔ con Value_1, Value_2, y asà sucesivamente.
- Los parÔmetros Statement_1, Statement_2⦠indican las instrucciones que se ejecutarÔn si Case_Expression = Value_1, Case_Expression = Value_2, y asà sucesivamente.
- En resumen, la condición es si Case_Expression = Value_N, y la acción es la ejecución de Statement_N si el resultado anterior es VERDADERO.
- ALIAS_NAME es opcional y es el nombre de alias que se le da al resultado de la instrucción CASE de SQL Server. Se usa principalmente cuando se utiliza CASE en la clÔusula SELECT de SQL Server.
Reglas para casos simples
- Simple Case solo permite una comprobación de igualdad de Case_Expression con Value_1 a Value_N.
- La expresión Case_Expression se compara con un valor, en orden, comenzando por el primer valor, es decir, Value_1. A continuación se muestra el enfoque de ejecución:
- Si Case_Expression es equivalente a Value_1, se omitirÔn mÔs declaraciones WHEN...THEN y la ejecución CASE TERMINARà inmediatamente.
- Si Case_Expression no coincide con Value_1, se compara con Value_2 para determinar su equivalencia. Este proceso de comparación continúa hasta que Case_Expression encuentra un valor equivalente entre Value_1, Value_2, y asà sucesivamente.
- Si no hay coincidencias, el control pasa a la instrucción ELSE y se ejecuta Statement_Else.
- MĆS es opcional.
- Si ELSE no estĆ” presente y Case_Expression no coincide con ninguno de los valores, entonces se muestra NULL.
El siguiente diagrama ilustra el flujo de ejecución de un caso simple:
Ejemplos
Supongamos que tenemos una tabla llamada 'Guru99' con dos columnas, Tutorial_ID y Tutorial_name, y cuatro filas, como se muestra a continuación. Usaremos este 'GuruTabla 99' en los ejemplos que siguen.
Consulta 1: CASO SIMPLE con la opción NO MĆS
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
Resultado: El diagrama a continuación explica el flujo de ejecución de un CASO SIMPLE sin ELSE.
Consulta 2: CASO SIMPLE con la opción ELSE
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
Resultado: El siguiente diagrama explica el flujo de ejecución de un CASO SIMPLE con ELSE.
CASO buscado
La sintaxis para el caso buscado
CASE WHEN <Boolean_Expression_1> THEN Statement_1 WHEN <Boolean_Expression_2> THEN Statement_2 . . WHEN <Boolean_Expression_N> THEN Statement_N [ELSE Statement_Else] END AS [ALIAS_NAME]
AquĆ:
- El parÔmetro Boolean_Expression_1⦠indica la expresión que se evaluarÔ como VERDADERA o FALSA.
- Los parĆ”metros Statement_1, Statement_2⦠indican las instrucciones que se ejecutarĆ”n si el resultado correspondiente de Boolean_Expression_1, Boolean_Expression_2 es āāVERDADERO.
- En resumen, la condición es Boolean_Expression_1⦠y la acción es la ejecución de Statement_N si la Boolean_Expression_1 anterior es VERDADERA.
- ALIAS_NAME es opcional y es el nombre de alias que se le da al resultado de la instrucción CASE. Se usa principalmente cuando se utiliza CASE en la clÔusula SELECT.
Reglas para el caso buscado
- A diferencia del caso simple, el caso con búsqueda no se limita únicamente a una comprobación de igualdad, sino que permite una expresión booleana.
- La expresión booleana se evalúa en orden, comenzando por la primera expresión booleana, es decir, Boolean_Expression_1. A continuación se muestra el método de ejecución:
- Si Boolean_Expression_1 es VERDADERO, entonces se omiten las siguientes instrucciones WHENā¦THEN y la ejecución de CASE TERMINARĆ inmediatamente.
- Si Boolean_Expression_1 es FALSE, entonces Boolean_Expression_2 se evalúa para determinar si es VERDADERA. Este proceso de evaluación de las expresiones booleanas continúa hasta que una de ellas sea VERDADERA.
- Si no hay coincidencias, el control pasa a la instrucción ELSE y se ejecuta Statement_Else.
- Al igual que en el caso simple, ELSE tambiƩn es opcional en el caso buscado.
- Si ELSE no estĆ” presente y ninguna de las expresiones booleanas devuelve VERDADERO, entonces se muestra NULL.
El siguiente diagrama ilustra el flujo de ejecución del caso buscado:
Ejemplos
Consulta 1: CASO BUSCADO con la opción NO MĆS
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
Resultado: El diagrama a continuación explica el flujo de ejecución del CASO BUSCADO sin ELSE.
Consulta 2: CASO BUSCADO con la opción ELSE
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
Resultado: El siguiente diagrama explica el flujo de ejecución del CASO BUSCADO con ELSE.
Diferencia entre el enfoque de ejecución: SIMPLE y CASO DE BĆSQUEDA
Veamos el siguiente ejemplo de CASO SIMPLE:
SELECT Tutorial_ID, Tutorial_name, CASE Tutorial_name WHEN 'SQL' THEN 'SQL is developed by IBM' WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' ELSE 'This is NO SQL language.' END AS Description FROM Guru99
AquĆ, 'Tutorial_name' forma parte de la expresión CASE en SQL. A continuación, el valor de 'Tutorial_name' se compara con cada valor de WHEN, es decir, 'SQL'... hasta que 'Tutorial_name' coincida con un valor de WHEN.
Por el contrario, el ejemplo SEARCH CASE no tiene ninguna expresión CASE:
SELECT Tutorial_ID, Tutorial_name, CASE WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM' WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.' WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.' END AS Description FROM Guru99
AquĆ, cada instrucción WHEN tiene su propia expresión booleana condicional. Cada expresión booleana, por ejemplo, Tutorial_name = 'SQL'⦠se evalĆŗa como VERDADERA/FALSA hasta que la primera expresión booleana se evalĆŗa como VERDADERA.
Diferencia entre el caso simple y el caso buscado
| Caso simple | Caso buscado |
| La palabra clave CASE va seguida inmediatamente de la expresión CASE y precede a la instrucción WHEN.
P.ej: |
La palabra clave CASE va seguida de la instrucción WHEN, y no hay ninguna expresión entre CASE y WHEN.
P.ej: |
| En un caso simple, existe un VALOR para cada instrucción WHEN. Estos valores (Valor_1, Valor_2ā¦) se comparan secuencialmente con una Ćŗnica expresión CASE. El resultado se evalĆŗa para determinar si la condición es VERDADERA o FALSA para cada instrucción WHEN.
P.ej: |
En un caso de bĆŗsqueda, existe una expresión booleana para cada instrucción WHEN. Estas expresiones booleanas (Expresión_Booleana_1, Expresión_Booleana_2ā¦) evalĆŗan la condición VERDADERA/FALSA para cada instrucción WHEN.
P.ej: |
| Un caso simple solo admite una comprobación de igualdad, es decir, si CASE_Expression = VALUE_1, VALUE_2ā¦
P.ej: |
Con Boolean_Expression_N, un caso buscado admite cualquier operación que dé como resultado un valor booleano. Esto incluye los operadores de igualdad y desigualdad.
P.ej: |
CASO anidado: CASO en SI ELSE
Podemos usar CASE dentro de una instrucción IFā¦ELSE. Declaramos una variable para el billete de avión y ramificar segĆŗn su valor. A continuación se muestra un ejemplo de código MS-SQL:
DECLARE @Flight_Ticket int; SET @Flight_Ticket = 190; IF @Flight_Ticket > 400 PRINT 'Visit Nearby Tourist Location'; ELSE BEGIN SELECT CASE WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles' WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York' WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe' END AS Location END
En el ejemplo anterior, la instrucción CASE estĆ” anidada dentro de la instrucción IFā¦ELSE. Primero, se ejecuta la instrucción IF, y si la condición CASE en SQL Server es falsa, se ejecuta la instrucción ELSE. La parte ELSE contiene una instrucción CASE anidada en SQL. Dependiendo del valor del billete de avión, se muestra uno de los siguientes resultados:
- El sistema imprime "Visite un lugar turĆstico cercano" si los billetes de avión cuestan mĆ”s de 400 dólares.
- El sistema imprime "Visite Los Ćngeles" si los billetes de avión cuestan ENTRE 0 Y 100 dólares.
- El sistema imprime "Visite Nueva York" si los billetes de avión cuestan ENTRE 101 Y 200 DĆLARES.
- El sistema imprime "Visite Europa" si los billetes de avión cuestan ENTRE 201 Y 400 DĆLARES.
El resultado que se muestra a continuación indica la ubicación devuelta cuando el CASE anidado se ejecuta dentro de la rama ELSE:
CASO anidado: CASO dentro de CASO
En SQL, podemos usar una clÔusula CASE dentro de otra clÔusula CASE. A continuación se muestra un ejemplo de código MS-SQL:
DECLARE @Flight_Ticket int; SET @Flight_Ticket = 250; SELECT CASE WHEN @Flight_Ticket >= 400 THEN 'Visit Nearby Tourist Location.' WHEN @Flight_Ticket < 400 THEN CASE WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles' WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York' WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe' END END AS Location
En el ejemplo anterior, la instrucción CASE estÔ anidada dentro de otra instrucción CASE. El sistema ejecuta primero la instrucción CASE externa; si Flight_Ticket < $400, se ejecuta la instrucción CASE interna. La ubicación devuelta sigue los mismos rangos de precios de boletos que en el ejemplo anterior, por lo que un boleto de $250 se encuentra dentro del rango de $201 a $400 y devuelve "Visitar Europa".
El resultado que se muestra a continuación indica la ubicación devuelta por el CASE interno para un boleto de $250:
CASO con ACTUALIZACIĆN
Supongamos de nuevo que tenemos el 'GuruTabla de 99' con dos columnas y cuatro filas, como se muestra a continuación:
Podemos usar CASE con ACTUALIZAR. A continuación se muestra el código MS-SQL de ejemplo:
UPDATE Guru99 SET Tutorial_Name = ( CASE WHEN Tutorial_Name = 'SQL' THEN 'Structured Query language.' WHEN Tutorial_Name = 'PL/SQL' THEN 'Oracle PL/SQL' WHEN Tutorial_Name = 'MSSQL' THEN 'Microsoft SQL.' WHEN Tutorial_Name = 'Hadoop' THEN 'Apache Hadoop.' END )
En el ejemplo anterior, se utiliza CASE en la instrucción UPDATE. Dependiendo del valor de Tutorial_Name, la columna Tutorial_Name se actualiza con el valor de la instrucción THEN:
- Si Tutorial_Name = 'SQL', entonces actualice Tutorial_Name a 'Structured Query language'.
- Si Tutorial_Name = 'PL/SQL', entonces actualice Tutorial_Name a 'Oracle PL/SQL.
- Si Tutorial_Name = 'MSSQL', entonces actualice Tutorial_Name a 'Microsoft SQL.
- Si Tutorial_Name = 'Hadoop', entonces actualice Tutorial_Name a 'Apache Hadoop'.
Al ejecutar la instrucción se actualizan las filas coincidentes, como se muestra a continuación:
Consultemos el 'GuruTabla '99' para comprobar los valores actualizados:
CASO con pedido por
Podemos usar CASE con ORDER BY. A continuación se muestra un ejemplo de código MS-SQL:
Declare @Order Int; Set @Order = 1 Select * from Guru99 order by CASE WHEN @Order = 1 THEN Tutorial_ID WHEN @Order = 2 THEN Tutorial_Name END DESC
AquĆ, se utiliza CASE con ORDER BY. @Order se establece en 1, y como la primera expresión booleana WHEN se evalĆŗa como VERDADERA, se selecciona Tutorial_ID para la condición ORDER BY. El resultado se muestra a continuación:
”Datos interesantes!
- CASE puede anidarse dentro de otro CASE, asĆ como dentro de una instrucción IFā¦ELSE.
- AdemƔs de SELECT, CASE se puede utilizar con otras clƔusulas SQL como UPDATE y ORDER BY.













