SOLUCION: Les explicaré de manera general el funcionamiento y algunos ejemplos de los mismos.
IIF
Muchas personas que hemos venido trabajando versiones anteriores a SQL SERVER 2012 hemos estado pidiendo a gritos una función similar; devuelve VERDADERO o FALSO para expresión de tipo booleana analizada dentro de la sintaxis.
En anteriores versiones usábamos la sintaxis CASE WHEN para tener un resultado similar a la función IIF, sin embargo la gran diferencia es que la primera función puede evaluar más de una expresión, la segunda solamente puede evaluar una.
Formato sencillo
CASE expresionBooleana
WHEN valorExpresionBooleana1 THEN valorDevueltoParaResultadoVerdadero1
WHEN valorExpresionBooleana2 THEN valorDevueltoParaResultadoVerdadero2
…
WHEN valorExpresionBooleanaN THEN valorDevueltoParaResultadoVerdaderoN
ELSE valorDevueltoParaELSE
END
USE AdventureWorks2014; GO SELECT ProductNumber, ProductLine, Category = CASE ProductLine WHEN 'R' THEN 'Road' WHEN 'M' THEN 'Mountain' WHEN 'T' THEN 'Touring' WHEN 'S' THEN 'Other sale items' ELSE 'Not for sale' END, Name FROM Production.Product ORDER BY ProductNumber; GO
Formato complejo
CASE
WHEN
expresionBooleana1 THEN valorDevueltoParaResultadoVerdadero1
WHEN
expresionBooleana2 THEN valorDevueltoParaResultadoVerdadero2
…
WHEN
expresionBooleanaN THEN valorDevueltoParaResultadoVerdaderoN
ELSE
valorDevueltoParaELSE
END
USE AdventureWorks2014; GO SELECT ProductNumber, Name, [Price Range] = CASE WHEN ListPrice = 0 THEN 'Mfg item - not for resale' WHEN ListPrice < 50 THEN 'Under $50' WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250' WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000' ELSE 'Over $1000' END FROM Production.Product ORDER BY ProductNumber ; GO
Un ejemplo sencillo
para IIF es el siguiente:
DECLARE @a int = 45, @b int = 40; SELECT IIF ( @a > @b, 'TRUE', 'FALSE' ) AS Result;Ahora bien, tratemos de aplicar la función IIF a los ejemplos utilizados para CASE
USE AdventureWorks2014; GO SELECT ProductNumber, ProductLine, Category = CASE ProductLine WHEN 'R' THEN 'Road' WHEN 'M' THEN 'Mountain' WHEN 'T' THEN 'Touring' WHEN 'S' THEN 'Other sale items' ELSE 'Not for sale' END, ResultadoIIF = IIF( ProductLine = 'R' , 'Road' , IIF( ProductLine = 'M' , 'Mountain' , IIF( ProductLine = 'T' , 'Touring' , IIF( ProductLine = 'S' , 'Other sale items' , 'Not for sale' ) ) ) ) , Name FROM Production.Product ORDER BY ProductNumber; GO
USE AdventureWorks2014; GO SELECT ProductNumber, Name, [Price Range] = CASE WHEN ListPrice = 0 THEN 'Mfg item - not for resale' WHEN ListPrice < 50 THEN 'Under $50' WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250' WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000' ELSE 'Over $1000' END , ResultadoIIF = IIF( ListPrice = 0 , 'Mfg item - not for resale' , IIF( ListPrice < 50 , 'Under $50' , IIF( ListPrice >= 50 and ListPrice < 250 , 'Under $250' , IIF( ListPrice >= 250 and ListPrice < 1000 , 'Under $1000' , 'Over $1000' ) ) ) ) FROM Production.Product ORDER BY ProductNumber ; GO
CHOOSE
Esta función devuelve
el valor contenido en una lista de valores dado una posición específica.
CHOOSE ( posición
, valor1, valor2 , valor3[, valorN ]
)
SELECT CHOOSE ( 3, '1. UNO', '2. DOS', '3. TRES', '4. CUATRO' ) AS Resultado;
USE AdventureWorks2014; GO SELECT ProductCategoryID, CHOOSE (ProductCategoryID, 'A','B','C','D','E') AS Expression1 FROM Production.ProductCategory;
USE AdventureWorks2014; GO SELECT JobTitle, HireDate , CHOOSE(MONTH(HireDate),'Invierno','Invierno', 'Primavera','Primavera','Primavera','Verano','Verano', 'Verano','Otoño','Otoño','Otoño','Invierno') AS Estacion FROM HumanResources.Employee
Espero que estos
ejemplos les sirvan para comprender mejor el funcionamiento y además puedan
aplicar dichas funciones si es que se requiere.
SALUDOS!
COMPARTE ESTA INFORMACION SI TE PARECIO INTERESANTE
0 comentarios:
Publicar un comentario