Usando Case en SQL Server

Estructura Case

La estructura Case permite evaluar una o mas condiciones y según el resultado de esta, obtener un resultado diferente. Use Case cuando la cantidad de opciones puede hacer que escribir una estructura Condicional IF sea algo complicado.

Para mas información vea:

Estructura Case SQL Server
Ordenamientos en SQL Server
Usando Joins en SQL Server
Actualización de datos – Update

Usando la base de datos Northwind
use Northwind
go

Establecer el formato de fechas en Día/Mes/Año
set dateformat dmy
go

Ejercicio 1

Ordenar las órdenes de Enero de 1997 de acuerdo a los días de la semana

select O.OrderID As 'Nº Orden', C.CompanyName As 'Cliente',
DATENAME(DW,O.OrderDate) As 'Día'
from Orders As O
join Customers As C on O.CustomerID = C.CustomerID
where O.OrderDate between '01/01/1997' and '31/01/1997'
Order by
Case DATENAME(DW,O.OrderDate)
When 'Lunes' then 1
When 'Martes' then 2
When 'Miércoles' then 3
When 'Jueves' then 4
When 'Viernes' then 5
When 'Sábado' then 6
Else 7
End asc,
Cliente
go
La imagen muestra el resultado

Ejercicio 2

Las órdenes de atendidas en agosto de 1997, ordenadas por empresa de envío.
Las empresas de envío son los registros de Shippers
select * from Shippers
go
La imagen muestra el resultado

Solamente son: Speedy Express, United Package y Federal Shipping

select O.OrderID As 'Nº Orden', C.CompanyName As 'Cliente',
S.CompanyName As 'Courier'
from Orders As O
join Customers As C on O.CustomerID = C.CustomerID
join Shippers As S on O.ShipVia = S.ShipperID
where O.ShippedDate between '01/08/1997' and '31/08/1997'
Order by
Case S.CompanyName
When 'Federal Shipping' then 1
When 'Speedy Express' then 2
When 'United Package' then 3
End,
Cliente
go
La imagen muestra el resultado

Ejercicio 3

Usando Case al hacer una actualización

Actualizar los precios de los productos, si la cantidad en Stock es mayor o igual a
100 aumentar en 10%, si es entre 50 y 99 aumentar 15%, si es entre 1 y 49 aumentar
20%, si no existe stock no debe variar el precio.

Para ver los productos y sus precios actuales.
select P.ProductID As 'Código', P.ProductName As 'Descripción',
P.UnitPrice as 'Precio', P.UnitsInStock As 'Stock'
from Products As P order by P.UnitsInStock desc
go
La imagen muestra el resultado

Para hacer la actualización de acuerdo al enunciado
UPDATE Products
SET UnitPrice = UnitPrice *
CASE
WHEN UnitsInStock >= 100 THEN 1.10
WHEN UnitsInStock >= 50 and UnitsInStock <= 99 THEN 1.15 WHEN UnitsInStock >= 1 and UnitsInStock <= 49 THEN 1.20
ELSE 0.00
END
go

Volvemos a listar para ver los nuevos precios
select P.ProductID As 'Código', P.ProductName As 'Descripción',
P.UnitPrice as 'Precio', P.UnitsInStock As 'Stock'
from Products As P order by P.UnitsInStock desc
go
La imagen muestra el resultado

Ejercicio 4

Case y valores Null

Listar los Clientes y ordenarlos por Región, primero los que tienen asignada una
y luego ordenarlos por pais. En lugar de mostrar el valor de Null mostrar "No especificada".

select C.CustomerID As 'Código', C.CompanyName As 'Cliente',
C.Country As 'País',
Case
When C.Region IS NULL Then 'No especificada'
Else C.Region
End As 'Región'
from Customers As C
order by
Case
When C.Region IS NULL Then 1
Else 0
End,
C.Country
go

La imagen muestra el resultado