How do I perform an IF…THEN in an SQL SELECT?

前端 未结 30 1837
梦如初夏
梦如初夏 2020-11-21 22:50

How do I perform an IF...THEN in an SQL SELECT statement?

For example:

SELECT IF(Obsolete = \'N\' OR InStock = \'Y\' ? 1 :          


        
相关标签:
30条回答
  • 2020-11-21 23:21

    This isn't an answer, just an example of a CASE statement in use where I work. It has a nested CASE statement. Now you know why my eyes are crossed.

     CASE orweb2.dbo.Inventory.RegulatingAgencyName
        WHEN 'Region 1'
            THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
        WHEN 'Region 2'
            THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
        WHEN 'Region 3'
            THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
        WHEN 'DEPT OF AGRICULTURE'
            THEN orweb2.dbo.CountyStateAgContactInfo.ContactAg
        ELSE (
                CASE orweb2.dbo.CountyStateAgContactInfo.IsContract
                    WHEN 1
                        THEN orweb2.dbo.CountyStateAgContactInfo.ContactCounty
                    ELSE orweb2.dbo.CountyStateAgContactInfo.ContactState
                    END
                )
        END AS [County Contact Name]
    
    0 讨论(0)
  • 2020-11-21 23:21

    As an alternative solution to the CASE statement, a table-driven approach can be used:

    DECLARE @Product TABLE (ID INT, Obsolete VARCHAR(10), InStock VARCHAR(10))
    INSERT INTO @Product VALUES
    (1,'N','Y'),
    (2,'A','B'),
    (3,'N','B'),
    (4,'A','Y')
    
    SELECT P.* , ISNULL(Stmt.Saleable,0) Saleable
    FROM
        @Product P
        LEFT JOIN
            ( VALUES
                ( 'N', 'Y', 1 )
            ) Stmt (Obsolete, InStock, Saleable)
            ON  P.InStock = Stmt.InStock OR P.Obsolete = Stmt.Obsolete
    

    Result:

    ID          Obsolete   InStock    Saleable
    ----------- ---------- ---------- -----------
    1           N          Y          1
    2           A          B          0
    3           N          B          1
    4           A          Y          1
    
    0 讨论(0)
  • 2020-11-21 23:22
     SELECT
       CASE 
          WHEN OBSOLETE = 'N' or InStock = 'Y' THEN 'TRUE' 
          ELSE 'FALSE' 
       END AS Salable,
       * 
    FROM PRODUCT
    
    0 讨论(0)
  • 2020-11-21 23:24

    The case statement is your friend in this situation, and takes one of two forms:

    The simple case:

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

    The extended case:

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

    You can even put case statements in an order by clause for really fancy ordering.

    0 讨论(0)
  • 2020-11-21 23:25

    You can use Case Statement:

    Select 
    Case WHEN (Obsolete = 'N' or InStock = 'Y') THEN 1 ELSE 0 END Saleable,
    Product.*
    from Product
    
    0 讨论(0)
  • 2020-11-21 23:26

    I like the use of the CASE statements but the question asked for an IF statement in the SQL Select. What I've used in the past has been:

    SELECT
    
       if(GENDER = "M","Male","Female") as Gender
    
    FROM ...
    

    It's like the excel or sheets IF statements where there is a conditional followed by the true condition and then the false condition:

    if(condition, true, false)
    

    Furthermore, you can nest the if statements (but then use should use a CASE :-)

    (Note: this works in MySQLWorkbench but may not work in other platforms)

    0 讨论(0)
提交回复
热议问题