【问题标题】:Change column status on "IS NULL" condition在“IS NULL”条件下更改列状态
【发布时间】:2018-06-04 03:43:25
【问题描述】:

我有一张桌子tblBooking

bkID bkCusID bkTotalAmount
---- ------- -------------
17   11      NULL
18   11      NULL
19   11      NULL

如果bkTotalAmount 为空,则bkStatus 应为0,否则应为1

bkID bkCusID bkStatus
---- ------- -------------
17   11      
18   11      
19   11

我使用COALESCE将状态更改为0,但不知道如果bkTotalAmount不为空,如何将状态更改为1

SELECT bkID, bkCusID, COALESCE(bkTotalAmount, 0) AS bkStatus
FROM tblBooking
WHERE bkCusID = 11 AND bkTotalAmount IS NULL

【问题讨论】:

    标签: sql sql-server coalesce isnull


    【解决方案1】:

    使用 ISNULL 函数代替 COALESCE

    SELECT 
    bkID,
    bkCusID,
    ISNULL(bkTotalAmount+1, 0) AS bkStatus 
    FROM tblBooking WHERE bkCusID=11 
    

    【讨论】:

    • 如果不为空如何添加1
    【解决方案2】:

    只需使用case:

    SELECT bkID, bkCusID,
           (CASE WHEN bkTotalAmount IS NULL THEN 0 ELSE 1 END) AS bkStatus
    FROM tblBooking
    WHERE bkCusID = 11 ;
    

    如果您希望将其存储在表本身中,您可以使用更新。相反,我建议添加一个计算列:

    alter table tblBooking add bkStatus as (CASE WHEN bkTotalAmount IS NULL THEN 0 ELSE 1 END);
    

    【讨论】:

    • 不需要申请条件AND bkTotalAmount IS NULL ?
    • @Asif.Ali 。 . .这似乎是一种不寻常的情况,您希望该列永远有一个“1”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    相关资源
    最近更新 更多