2011-07-07 26 views
30

En mi tabla obtuve una columna cuyo valor es 0 o 1. Si esa columna es 0, obtengo el valor como 'no'; si 1 debería mostrar como 'sí' para todas las filas. ¿Cómo puedo hacer esto solo usando una declaración SQL? GraciasServidor SQL INLINE IF ELSE

Respuesta

51

SQL Server no tiene un if declaración en línea, pero tiene una línea case que se pueden utilizar para llevar a cabo la misma.

la caja tiene dos formas, una es:

select 
case MyFlag 
    when 1 then 'YES' 
    when 0 then 'NO' 
    else 'OOPS' 
end 
from MyTable 

donde se utiliza como un interruptor en lenguajes como C y el otro es:

select 
case 
    when MyFlag = 1 then 'YES' 
    when MyFlag = 0 then 'NO' 
    -- when some unrelated condition... 
    else 'OOPS' 
end 
from MyTable 

donde senquentially evalúa una lista de condiciones y devuelve el primero que se cumple.

P.S. La parte end es obligatoria, y generalmente me olvido de eso. También es habitual que un simple case stament a ser completamente inline, como

select (case MyFlag when 1 then 'Yes' else 'No' end) as MyFlagDesc 
7

Algo como esto:

SELECT 
    CASE YourColumn 
     WHEN 0 THEN 'no' 
     WHEN 1 THEN 'yes' 
     ELSE 'nothing' 
    END 
FROM dbo.YourTable 
8

dos posibilidades:

(CASE WHEN condition1 THEN Value1 ELSE Value2 END) 

o, la solución más completa:

(CASE value_to_check WHEN Value1 THEN Result1 [WHEN ... THEN ...] ELSE OtherResult END) 
47

entiendo que esta pregunta (que aparece en la parte superior de los resultados de google para "sql server inline if") tiene 2 años, pero con SQL Server 2012, las respuestas están algo desactualizadas . También parece ser un duplicado de SQL inline if statement type question, pero esa pregunta (que es aún más antigua), tampoco tiene una respuesta actualizada.

En SQL Server 2012 puede utilizar el IIF function:

IIF (boolean_expression, true_value, false_value) 

Ejemplo:

SELECT IIF(someColumn = 1, 'yes', 'no') 
+1

upvoted, prefiero IIF frente CASE para condiciones booleanas simples, ya que es más aerodinámico – Breakskater

+0

esto es agradable respuesta, gracias. –

1

mezclé tres IIF en una línea, tengo tres variables y quiero saber cuál es mayor que cero, pero sé que el orden de prioridad PersonHomePhoneID, PersonWorkPhoneID y PersonCellPhoneID

IIF(@PersonHomePhoneID > 0 , @PersonHomePhoneID, IIF(@PersonWorkPhoneID > 0 , @PersonWorkPhoneID, IIF(@PersonCellPhoneID > 0 , @PersonCellPhoneID, 0))) 

La respuesta de la pregunta: ¿

IIF(column = 1 , 'yes', IIF(column = 0, 'no', ''))