1337 votos

¿Cómo realizar un IF...THEN en un SELECT de SQL?

¿Cómo puedo realizar un IF...THEN en una instrucción SELECT de SQL?

Por ejemplo;

SELECT IF(Obsolete = 'N' or InStock = 'Y';1;0) as Salable, * FROM Product

1570voto

Darrel Miller Puntos 56797

La declaración CASE es la más cercana al 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 Salable, * 
FROM Product

Usted sólo necesita hacer CAST si desea que el resultado sea un valor booleano, si le vale con un int, esto funciona:

SELECT CASE 
            WHEN Obsolete = 'N' or InStock = 'Y' 
               THEN 1 
               ELSE 0 
       END as Salable, * 
FROM Product

Las declaraciones CASE pueden ser integradas en otros CASE, e incluso incluidos en agregados.

SQL Server Denali añade la declaración IIF que también está disponible en access: (señalado por Martin Smith)

SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Selable, * from Product

301voto

Jonathan Puntos 6934

La instrucción CASE es tu amiga en esta situación, y toma una de dos formas:

El CASE simple:

SELECT CASE <variable> WHEN <value>      THEN <returnvalue>
                       WHEN <othervalue> THEN <returnthis>
                                         ELSE <returndefaultcase>
       END
FROM <table>

El CASE extendido:

SELECT CASE WHEN <test>      THEN <returnvalue>
            WHEN <othertest> THEN <returnthis>
                             ELSE <returndefaultcase>
       END
FROM <table>

Incluso se puede poner CASE en una cláusula order by para hacer un ordenado complejo.

236voto

Martin Smith Puntos 174101

Como esto no está etiquetada para una versión específica.....

A partir de SQL Server 2012 puede utilizar la función IIF.

SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM   Product

81voto

Sven Puntos 7277

Usted puede encontrar algunos buenos ejemplos en El Poder de la Instrucción SQL CASE , y creo que la declaración que usted puede utilizar será algo como esto (de 4guysfromrolla):

SELECT
    FirstName, LastName,
    Salary, DOB,
    CASE Gender
        WHEN 'M' THEN 'Male'
        WHEN 'F' THEN 'Female'
    END
FROM Employees

73voto

palehorse Puntos 8268

Usa CASE. Algo como esto.

SELECT Salable =
        CASE Obsolete
        WHEN 'N' THEN 1
        ELSE 0
    END

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X