¿Cómo realizo un IF...THENen una SQL SELECTdeclaració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

WHEREyCHECKnoSELECT.Respuestas:
La
CASEdeclaración es la más cercana a IF en SQL y es compatible con todas las versiones de SQL Server.Solo necesita hacer esto
CASTsi quiere el resultado como un valor booleano. Si está satisfecho con unint, esto funciona:CASElas declaraciones se pueden incrustar en otrasCASEdeclaraciones 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_Namedespués delENDpara nombrar la columna resultanteDesde SQL Server 2012 puede usar la
IIFfunció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
CASEversión ampliada .Tanto
IIF()yCASEdeterminació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
IFpalabra 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
whereclá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 ELSEen 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
SELECTcomo 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
caseSQL Server .Para comenzar, debe calcular el valor de
trueyfalsepara 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
CASEser votado y marcado como una respuesta en lugar de laIFque debería haber sido la respuesta, como esta, esta sigue siendo unaCASEdeclaració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
CASEdeclaració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,
pen 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 laSQLsiguiente 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