代码之家  ›  专栏  ›  技术社区  ›  4est

基于其他列的If语句

  •  1
  • 4est  · 技术社区  · 8 年前

    我有一条精选语句:

    select DATEDIFF(day,[Contract Start Date],[Contract End Date]) as contract_time
    from table 1
    

    现在,如何将if语句添加到下一列:

    contract_time >= 390 then display A
    contract_time < 390 then display B
    contract_time is null display C? (because Contract start date or End date can be null)
    

    谢谢你的帮助!

    3 回复  |  直到 8 年前
        1
  •  3
  •   Zohar Peled    8 年前

    使用 case expression :

    ;With cte as 
    (
    select DATEDIFF(day,[Contract Start Date],[Contract End Date]) as contract_time,
    a,
    b,
    c
    from table 1
    )
    
    select contract_time
           case when contract_time is null then c
                when contract_time >= 390 then a
                when contract_time <  390 then b
           end as otherColumn
    from cte
    

    请注意,a、b和c必须都是相同的数据类型。

        2
  •  0
  •   Nitin Vijay    8 年前

    使用SQL Server 2012中支持的IIF函数,否则也可以使用CASE WHEN…THEN…END

    ;With cte_table1 as 
    (
       SELECT 
           DATEDIFF(day,[Contract Start Date],[Contract End Date]) as contract_time,
           A,
           B,
           C
       FROM [table 1]
    )
    
    SELECT contract_time,
           IIF(contract_time is null,C,
               IIF(contract_time >= 390, A,B))
           as otherColumn
    FROM cte_table1
    
        3
  •  0
  •   StackUser    8 年前

    试着这样,

    SELECT DATEDIFF(day, [Contract Start Date], [Contract End Date]) AS contract_time
        ,CASE 
            WHEN DATEDIFF(day, [Contract Start Date], [Contract End Date]) IS NULL
                THEN c
            WHEN DATEDIFF(day, [Contract Start Date], [Contract End Date]) >= 390
                THEN a
            WHEN DATEDIFF(day, [Contract Start Date], [Contract End Date]) < 390
                THEN b
            END AS otherColumn
    FROM TABLE