¿Cómo realizo un IF...THEN
en una SQL SELECT
¿declaración?
Por ejemplo:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
¿Cómo realizo un IF...THEN
en una SQL SELECT
¿declaración?
Por ejemplo:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
los CASE
declaración es lo más cercano a IF en SQL y es compatible con todas las versiones de SQL Server
SELECT CAST(
CASE
WHEN Obsolete = 'N' or InStock = 'Y'
THEN 1
ELSE 0
END AS bit) as Saleable, *
FROM Product
Solo necesitas hacer CAST
si desea el resultado como un valor booleano, si está satisfecho con un int
, esto funciona:
SELECT CASE
WHEN Obsolete = 'N' or InStock = 'Y'
THEN 1
ELSE 0
END as Saleable, *
FROM Product
CASE
las declaraciones se pueden incrustar en otra CASE
declaraciones e incluso incluidas en los agregados.
SQL Server Denali (SQL Server 2012) agrega el IIF declaración que también está disponible en acceso: (señalado por Martin Smith)
SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product
La declaración del caso es su amigo en esta situación, y toma una de dos formas:
El caso simple:
SELECT CASE <variable> WHEN <value> THEN <returnvalue>
WHEN <othervalue> THEN <returnthis>
ELSE <returndefaultcase>
END AS <newcolumnname>
FROM <table>
El caso extendido:
SELECT CASE WHEN <test> THEN <returnvalue>
WHEN <othertest> THEN <returnthis>
ELSE <returndefaultcase>
END AS <newcolumnname>
FROM <table>
Incluso puede colocar declaraciones de casos en una cláusula order by para obtener un orden realmente elegante.
Desde SQL Server 2012 puede usar el IIF
función para esto.
SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM Product
Esto es solo una forma abreviada (aunque no es un SQL estándar) de escribir CASE
.
Prefiero la concisión cuando se compara con la expansión CASE
versión.
Ambos IIF()
y CASE
resolver como expresiones dentro de una declaración de SQL y solo se puede usar en lugares bien definidos.
La expresión CASE no se puede usar para controlar el flujo de ejecución de Instrucciones Transact-SQL, bloques de instrucciones, funciones definidas por el usuario y procedimientos almacenados.
Si sus necesidades no pueden ser satisfechas por estas limitaciones (por ejemplo, la necesidad de devolver conjuntos de resultados con formas diferentes que dependan de alguna condición), entonces SQL Server también tiene un procedimiento IF
Palabra clave.
IF @IncludeExtendedInformation = 1
BEGIN
SELECT A,B,C,X,Y,Z
FROM T
END
ELSE
BEGIN
SELECT A,B,C
FROM T
END
Puedes encontrar algunos buenos ejemplos en El poder de las sentencias de SQL CASE, y creo que la declaración que puede usar será algo como esto (de 4guysfromrolla)
SELECT
FirstName, LastName,
Salary, DOB,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
END
FROM Employees
Use CASE. Algo como esto.
SELECT Salable =
CASE Obsolete
WHEN 'N' THEN 1
ELSE 0
END
SELECT
(CASE
WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'YES'
ELSE 'NO'
END) as Salable
, *
FROM Product
SELECT
CASE
WHEN OBSOLETE = 'N' or InStock = 'Y' THEN 'TRUE'
ELSE 'FALSE'
END AS Salable,
*
FROM PRODUCT
Microsoft SQL Server (T-SQL)
En un uso selecto:
select case when Obsolete = 'N' or InStock = 'Y' then 'YES' else 'NO' end
En una cláusula where, usa:
where 1 = case when Obsolete = 'N' or InStock = 'Y' then 1 else 0 end