Rajendra Gupta
SQL Case Statement

Sentencia CASE en SQL

September 30, 2019 by

La declaración de la sentencia CASE en SQL retorna un valor en una condición especificada. Trataremos de usar una declaración de case en las consultas que fueron seleccionadas junto con la cláusula Where, Order By y Group By. A su vez se puede utilizar en la opción de Insertar declaración. En este artículo, vamos a desarrollar la declaración CASE y todos sus diferentes casos de uso.

Supongamos que se tiene una tabla que contiene el ProductID para todos los productos en una tienda pequeña. Y se desea tratar de obtener el Productname para un ProductID en particular.

Veamos el siguiente ejemplo; Vamos a declarar una variable la cual va a ser: @ProductID y le asignamos el valor 1. En la declaración del caso, vamos a definir las condiciones. el momento en el que se cumple una condición, se devuelve su valor correspondiente.

SQL Case Statement

De la misma manera, si modificamos la condición en una declaración de case en SQL, se va a devolver la expresión apropiada. En el próximo ejemplo, lo que queremos obtener es el nombre del Producto para ProductID 4. Pero no cumple la condición de declaración del Case; por lo tanto, dio salida de la expresión Else.

SQL Case Statement

Examinamos algunos ejemplos de la declaración del case en SQL. Antes de poder continuar, tiene que crear una tabla de muestre e inserte algunos registros en esa tabla.

Tenemos los siguientes registros en la tabla de empleados.

Demo Table

Distintos formatos de declaraciones CASE

Una simple expresión de declaración CASE

En este formato, vamos a evaluar una expresión contra múltiples valores. En una declaración de case simple, este va a evaluar todas las condiciones una por una. El momento en el que la condición y la expresión llegan a coincidir, se devuelve la expresión mencionada en la cláusula THEN.

A continuación, tenemos la siguiente sintaxis para una declaración de case en SQL con una expresión simple.

Generalmente, vamos almacenando abreviaturas en una tabla en lugar de su forma completa. Como por ejemplo, en mi tabla de empleados, he utilizado las siguientes abreviaturas en Gender y StateCode. Quiero tratar de usar una declaración Case para poder devolver valores como el Masculino y el Femenino en la salida, envés de M y F.

Vaya a ejecutar el siguiente código y va a observar que estamos intentando evaluar el CASE Gender en esta consulta.

En la imagen que viene a continuación, se puede notar una diferencia en la salida utilizando una instrucción Case en SQL.

SQL Case Statement example

La declaración CASE y el operador de comparación

Vamos a explorar que en este formato de una declaración CASE en SQL, podemos ya evaluar una condición utilizando los operadores de comparación. Una vez que se vaya a cumplir esta condición, vamos a obtener una expresión de THEN correspondiente en la salida

Vamos a ver la siguiente sintaxis para la declaración de caso con un operador de comparación.

Consideremos que obtenemos una banda salarial para cada designación. Si el salario de los empleados se encuentra entre un rango particular, tratemos de obtener una designación usando una declaración de Caso.

En la próxima consulta, vamos a utilizar un operador de comparación y evaluamos una expresión.

En la imagen a continuación puede ver, que obtenemos la designación según la condición especificada en la declaración CASE.

SQL Case Statement example

Declaración de caso con orden por cláusula

También vamos a usar la declaración del case con orden por cláusula. En SQL, podemos utilizar la cláusula de Ordenar por para organizar los resultados en un orden ascendente o descendente.

Supongamos en otro ejemplo; Queremos tratar de organizar el resultado con el siguiente método.

  1. Para las empleadas, los salarios de los empleados deben venir en orden descendente
  2. Para el empleado masculino, debemos tratar de obtener los salarios de los empleados en orden ascendente

Trataremos de definir esta condición con una combinación de Ordenar por y Declaración de case. En la próxima consulta, puede ver que estamos especificando al mismo tiempo Ordenar por y Case. Vamos a definir las condiciones de ordenación en la expresión de mayúsculas y minúsculas.

En la salida, ya hemos satisfecho nuestro requisito de clasificación en orden ascendente o descendente

  • Para las empleadas, el salario se muestra en orden descendente

SQL Case Statement in Order By clause

  • Para el empleado masculino, el salario se muestra en orden ascendente

SQL Case Statement in Order By clause

Declaración de caso en SQL con grupo por cláusula

A su vez podemos utilizar una declaración de caso con la cláusula Group By. Supongamos que tenemos que agrupar a todos los empleados según su salario. Adicionalmente, tenemos que calcular el salario mínimo y máximo para un rango particular de empleados.

En la próxima consulta, puede ver que tenemos la cláusula Group By y la cual contiene la condición para tratar de obtener el resultado requerido.

Tenemos el próximo resultado de esta consulta. En este resultado, obtenemos el salario mínimo y máximo para una designación particular.

SQL Case Statement in Group By clause

Declaración de actualización con una declaración de CASE

También podemos utilizar una declaración de case en SQL con la actualización de DML. Supongamos que vamos actualizar el código de estado de los empleados según las condiciones de la declaración del caso.

En el próximo código, vamos a tratar de actualizar el código de estado con la siguiente condición.

  • Si el código de estado del empleado es AR,, actualice aFL
  • Si el código de estado del empleado es GE, , actualice a AL
  • Para todos los otros códigos de estado, actualice el valor a IN

Ejecute el próximo comando de actualización para poder cumplir nuestro requisito utilizando una declaración de case.

En el próximo resultado, puede apreciar el antiguo Statcode (lado izquierdo) y el Statecode actualizado para los empleados según nuestras condiciones en la declaración del caso.

SQL Case Statement in Update statement

Insertar declaración con declaración CASE

Podemos también insertar datos en tablas SQL con la ayuda de la declaración de caso en SQL. Asumamos que tenemos una aplicación la cual inserta datos en la tabla Empleados. Con la cual obtenemos los siguientes valores de género.

Value

Description

Required value in Employee table

0

Male Employee

M

1

Female Employee

F

No queremos insertar el valor 0 y 1 para empleados masculinos y femeninos. Ya que necesitamos insertar los valores requeridos M y F para el género del empleado.

En la próxima consulta, especificamos cuales son las variables para almacenar valores de columna. En la declaración de inserción, se puede utilizar una declaración de caso para poder definir el valor correspondiente para insertar en la tabla de empleados. En la declaración de caso, hay que verificar los valores requeridos e insertar los valores de THENcon expresión en la tabla.

En la captura de pantalla que se muestra a continuación, podemos ver que la fila recién insertada contiene Género M en lugar del valor 0.

SQL Case Statement in Insert clause

Las limitaciones en una declaración de case

  • No se puede controlar el flujo de ejecución de procedimientos almacenados, funciones usando una declaración de case en SQL
  • Podemos tener múltiples condiciones en la declaración del case; No obstante, funciona en un modelo secuencial. Si se cumple una condición, deja de verificar otras condiciones
  • No podemos utilizar una declaración de case para poder verificar valores NULL en una tabla

Conclusión

La declaración de caso en SQL nos proporciona flexibilidad para poder escribir T-SQL para consultas DDL y DML. También se puede agregar versatilidad a las consultas de SQL Server. Se debe practicar la declaración de case en sus consultas.

Rajendra Gupta
Funciones

Acerca de Rajendra Gupta

As an MCSA certified and Microsoft Certified Trainer in Gurgaon, India, with 13 years of experience, Rajendra works for a variety of large companies focusing on performance optimization, monitoring, high availability, and disaster recovery strategies and implementation. He is the author of hundreds of authoritative articles on SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS/Amazon RDS, Git, and related technologies that have been viewed by over 10m readers to date. He is the creator of one of the biggest free online collections of articles on a single topic, with his 50-part series on SQL Server Always On Availability Groups. Based on his contribution to the SQL Server community, he has been recognized with various awards including the prestigious “Best author of the year" continuously in 2020 and 2021 at SQLShack. Raj is always interested in new challenges so if you need consulting help on any subject covered in his writings, he can be reached at rajendra.gupta16@gmail.com View all posts by Rajendra Gupta

168 Views