viernes, 3 de julio de 2015

Receta T-SQL No. 2.4: Escritura de una Expresión CASE Simple

Índice

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica: Código T-SQL
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

En esta oportunidad, aprenderemos una receta sencilla para composición de expresiones CASE simples. Ya veremos que esta construcción de T-SQL nos será útil para la evaluación del valor de una columna o variable que abarque un conjunto definido de posibles valores.

1. Problema

Requerimos evaluar diferentes valores de una variable o columna para determinar el valor de salida para cada valor de entrada. Adicionalmente, se requiere que la evaluación se efectúe sobre el contenido de una columna de una tabla o de una variable.

2. Solución

La solución a este requerimiento es recurrir a la construcción de T-SQL CASE [2]. Esta construcción evalua una lista de condiciones y puede retornar una de múltiples expresiones especificadas en su cuerpo de declaración. (Vale anotar que esta expresión es análoga a la construcción de control de flujo switch del lenguaje de programación C#.)

Los formatos posibles de CASE son:
  • La versión simple consiste en especificar un valor del conjunto de valores posibles de la variable o columna.
  • La versión alternativa consiste en formar una expresión booleana o de búsqueda. (Esta versión la estudiáremos con el detalle que corresonda en la siguiente receta.)

3. Discusión de la Solución

In extenso, la construcción CASE posee estas dos formas declarativas para su uso de evaluación de valores y expresiones booleanas:

3.1 Versión simple

CASE variable_o_columna
    WHEN valor_1 THEN expresion_resultado
    WHEN valor_2 THEN expresion_resultado
    WHEN valor_3 THEN expresion_resultado
    WHEN valor_n THEN expresion_resultado
   [ELSE expresion_resultado_alternativo]
END

Notemos que la expresión ELSE es alternativa en este caso.

3.2 Versión con expresión booleana

CASE
    WHEN expresion_booleana_1 THEN expresion_resultado
    WHEN expresion_booleana_2 THEN expresion_resultado
    WHEN expresion_booleana_3 THEN expresion_resultado
    WHEN expresion_booleana_n THEN expresion_resultado
   [ELSE expresion_resultado_alternativo]
END

La expresión booleana, recordemos, puede incluir cualquier de los operadores de comparación disponibles [4].

4. Práctica: Código T-SQL

En este primer ejemplo usaremos la columna GroupName de la tabla HumanResources.Department de la base de datos de ejemplo AdventureWorks. Con el uso de CASE formaremos una nueva columna la cual contendrá un valor de representación a la versión extendida del campo GraoupName. Los nombres de los campos nuevos que usaremos son:
  • Módulo A, 
  • Módulo B, 
  • Módulo C, y 
  • Módulo D
Notemos que esta versión simple de CASE, tenemos hasta cuatro expresiones simples que serán contrastadas con el valor de la columna GroupName. El valor que aparece frente a THEN será el que se asigne a la columna Modulo.


Una vez ejecutemos esta expresión T-SQL, obtendremos el siguiente resultado en Microsoft SQL Management Studio 2014:
Escritura de una Expresión CASE Simple - Resultado ejemplo 1
Figura 1. Escritura de una Expresión CASE Simple - Resultado ejemplo 1.

5. Conclusiones

Hemos abordado la conformación de expresiones CASE simples con la descripción sintáctica y un ejemplo de uso. Es importante resaltar que esta construcción nos simplifica la evaluación de valores de variables o columnas de forma ordenada, como fue el caso del ejemplo en donde seleccionamos como entrada una cadena de caracteres y de acuerdo a su valor asignamos una salida a una columna virtual. En la próxima receta T-SQL, estudiáremos con más detalle la versión con expresión booleana o de búsqueda (como la llaman en [1]).

6. Glosario

  • Consulta
  • Microsoft SQL Management Studio
  • SQL Server
  • T-SQL

7. Literatura & Enlaces

[1]: SQL Server 2012 T-SQL Recipes - A Problem-Solucion Approach by Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield. Copyright 2012 Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield, 978-1-4302-4200-0.
[2]: CASE (Transact-SQL) - https://msdn.microsoft.com/en-us/library/ms181765.aspx?f=255&MSPPError=-2147217396
[3]: Sentencias en C# - Parte 2 - http://ortizol.blogspot.com/2013/10/sentencias-en-c-parte-2.html
[4]: Comparison Operators (Transact-SQL) - https://msdn.microsoft.com/en-us/library/ms188074.aspx


J

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.