¿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
sql
sql-server
tsql
if-statement
case
Eric Labashosky
fuente
fuente
WHERE
yCHECK
noSELECT
.Respuestas:
La
CASE
declaración es la más cercana a IF en SQL y es compatible con todas las versiones de SQL Server.Solo necesita hacer esto
CAST
si quiere el resultado como un valor booleano. Si está satisfecho con unint
, esto funciona:CASE
las declaraciones se pueden incrustar en otrasCASE
declaraciones e incluso se pueden incluir en agregados.SQL Server Denali (SQL Server 2012) agrega la declaración IIF que también está disponible en acceso (señalado por Martin Smith ):
fuente
La declaración del caso es su amigo en esta situación, y toma una de dos formas:
El caso simple:
El caso extendido:
Incluso puede poner declaraciones de caso en un orden por cláusula para un pedido realmente elegante.
fuente
AS Col_Name
después delEND
para nombrar la columna resultanteDesde SQL Server 2012 puede usar la
IIF
función para esto.Esto es efectivamente solo una forma abreviada (aunque no estándar de SQL) de escritura
CASE
.Prefiero la concisión en comparación con la
CASE
versión ampliada .Tanto
IIF()
yCASE
determinación como expresiones dentro de una instrucción SQL y sólo puede ser utilizado en lugares bien definidos.Si sus necesidades no pueden satisfacerse con estas limitaciones (por ejemplo, la necesidad de devolver conjuntos de resultados con formas diferentes que dependen de alguna condición), entonces SQL Server también tiene una
IF
palabra clave de procedimiento .Sin embargo, a veces se debe tener cuidado para evitar problemas de detección de parámetros con este enfoque .
fuente
Puede encontrar algunos buenos ejemplos en The Power of SQL CASE Statements , y creo que la declaración que puede usar será algo como esto (de 4guysfromrolla ):
fuente
Use CASE. Algo como esto.
fuente
fuente
Microsoft SQL Server (T-SQL)
En a
select
, use:En una
where
cláusula, use:fuente
where Obsolete = 'N' or InStock = 'Y'
y cortarías el por la mitad prácticamente?Desde este enlace , podemos entender
IF THEN ELSE
en T-SQL:¿No es esto lo suficientemente bueno para T-SQL?
fuente
fuente
Declaración simple if-else en SQL Server:
Sentencia anidada If ... else en SQL Server -
fuente
SELECT
como OP preguntó?Se agregó una nueva característica, IIF (que simplemente podemos usar), en SQL Server 2012:
fuente
Use una declaración CASE:
fuente
Use lógica de bit puro:
Ver demostración de trabajo: si es así sin
case
SQL Server .Para comenzar, debe calcular el valor de
true
yfalse
para las condiciones seleccionadas. Aquí vienen dos NULLIF :combinados juntos da 1 o 0. Siguiente uso de operadores bit a bit .
Es el método más WYSIWYG .
fuente
fuente
fuente
fuente
Esta no es una respuesta, solo un ejemplo de una declaración CASE en uso donde trabajo. Tiene una declaración CASE anidada. Ahora sabes por qué mis ojos están cruzados.
fuente
CASE
ser votado y marcado como una respuesta en lugar de laIF
que debería haber sido la respuesta, como esta, esta sigue siendo unaCASE
declaración, no unaIF
.Si está insertando resultados en una tabla por primera vez, en lugar de transferir resultados de una tabla a otra, esto funciona en Oracle 11.2g:
fuente
Como una solución alternativa a la
CASE
declaración, se puede utilizar un enfoque basado en tablas:Resultado:
fuente
fuente
Para aquellos que usan SQL Server 2012, IIF es una característica que se ha agregado y funciona como una alternativa a las declaraciones de casos.
fuente
fuente
Puede tener dos opciones para implementar esto realmente:
Usando IIF, que se introdujo desde SQL Server 2012:
Utilizando
Select Case
:fuente
Pregunta:
ANSI:
El uso de alias,
p
en este caso, ayudará a prevenir problemas.fuente
Usar SQL CASE es como las declaraciones normales If / Else. En la consulta a continuación, si el valor es obsoleto = 'N' o si el valor de InStock = 'Y', la salida será 1. De lo contrario, la salida será 0. Luego colocamos ese valor 0 o 1 debajo de la columna vendible.
fuente
If..Then...Else..
uso de las declaraciones de laSQL
siguiente manera ...fuente
Será algo así:
fuente
SELECT OrderID, Quantity, CASE WHEN Quantity > 30 THEN "The quantity is greater than 30" WHEN Quantity = 30 THEN "The quantity is 30" ELSE "The quantity is under 30" END AS QuantityText FROM OrderDetails WHERE QuantityText = 'The quantity is 30';
En aras de la exhaustividad, agregaría que SQL utiliza la lógica de tres valores. La expresion:
Podría producir tres resultados distintos:
Entonces, por ejemplo, si un producto es obsoleto pero no sabe si el producto es instock, entonces no sabe si el producto es vendible. Puede escribir esta lógica de tres valores de la siguiente manera:
Una vez que descubra cómo funciona, puede convertir tres resultados en dos resultados al decidir el comportamiento de nulo. Por ejemplo, esto trataría nulo como no vendible:
fuente
Me gusta el uso de las declaraciones CASE pero la pregunta solicitó una declaración IF en SQL Select. Lo que he usado en el pasado ha sido:
Es como las declaraciones IF de Excel o de hojas donde hay un condicional seguido de la condición verdadera y luego la condición falsa:
Además, puede anidar las declaraciones if (pero luego use debería usar un CASE :-)
(Nota: esto funciona en MySQLWorkbench pero puede no funcionar en otras plataformas)
fuente
Puede usar la Declaración de caso:
fuente