
Estructura Case comparada con Join
La estructura Case evalua una expresión condicional y retorna uno de múltiples resultados.
La estructura Case tiene dos formas:
La expresión CASE simple compara una expresión con un conjunto de expresiones simples para determinar el resultado.
La expresión CASE buscada evalúa un conjunto de expresiones booleanas para determinar el resultado.
Ambos formatos admiten un argumento ELSE opcional.
- Importante:
- CASE se puede usar en cualquier declaración o cláusula que permita una expresión válida.
- La estructura CASE se puede usar en SELECT, UPDATE, DELETE y SET.
- También se puede usar en la lista de campos de la instrucción Select y el las expresiones con el operador IN (Ver Operadores en SQL Server) y las cláusulas WHERE (Ver Filtrado de datos), ORDER BY (Ver Ordenamientos) y HAVING (Ver Filtros Having).
- Para mayor información ver Estructura Case
En este artículo vamos a comparar el uso de Case con un Join, es necesario resaltar que si las opciones posibles del Case cambian, es necesario reescribir la consulta.
Usando la base de datos Northwind
use Northwind
go
Ejercicio 1
a. Usando Case para la lista de productos y los nombres de las categorias
select P.ProductID as ‘Código’, P.ProductName as ‘Descripción’,
Case CategoryID
When 1 then ‘Bebidas’
When 2 then ‘Condimentos’
When 3 then ‘Confecciones’
When 4 then ‘Productos diarios’
When 5 then ‘Cereales’
When 6 then ‘Carnes’
When 7 then ‘Conservas’
When 8 then ‘Productos marinos’ End As Categoría
from Products As P
go
El costo estimado de la consulta usando Case se puede ver en la siguiente imagen.
Costo: 0.0033744

b. Usando Join para listar los productos y su categoría (Ver Joins)
Select P.ProductID as ‘Código’, P.ProductName as ‘Descripción’,
C.CategoryName AS Categoría
from Products As P
join Categories As C on P.CategoryID = C.CategoryID
go
El costo estimado de la consulta usando Joins se puede ver en la siguiente imagen.
Costo: 0.0189873

Si comparamos los valores, Case en este caso es es mas rápido, al usar Join la consulta tiene un costo de 5,63 veces mayor, es necesario anotar nuevamente que si las categorías cambian, la consulta usando Case es necesario reescribirla.
Ejercicio 2
a. Usando las tablas Region y Terrotories con Case
select T.TerritoryID As ‘Código’, T.TerritoryDescription As ‘Territorio’,
Region = case T.RegionID
When 1 then ‘Este’
When 2 then ‘Oeste’
When 3 then ‘Norte’
When 4 then ‘Sur’ End
from Territories As T
go
El plan de ejecución muestra este costo.

b. Usando Join para listar los territorios y las regiones a las que pertenecen
Select T.TerritoryID as ‘Código’, T.TerritoryDescription as ‘Territorio’,
R.RegionDescription AS ‘Región’
from Territories As T
join Region As R on T.RegionID = R.RegionID
go
