CASE表达式返回NULL值

时间:2018-05-02 22:16:06

标签: sql sql-server null case

我正在尝试使用案例表达式获取我的票证状态。它工作得很好但没有返回Not Available。而不是它在Status中返回null值作为结果。

此查询有什么问题?

其次,我可以在返回操作时做进一步吗?

Select 
Case 
      When Status=1 and isTaken=1 then 'Open'
      When Status=4 and isTaken=0 then 'Expire'
      When Status=2 and isTaken=0 then 'Pending'
      When Status=0 and isTaken=0 then 'Close'

Else 'Not Available' End As 'Status' 
from Tickets 
Where Id='1234567890'

检查图像以获取更多说明。

enter image description here

1 个答案:

答案 0 :(得分:2)

您的查询未返回NULL,它返回0行。您的WHERE正在过滤行,或者您的表格为空。

删除WHERE并查看它是否返回行,以查看该表是否为空。如果是,请确保您的ID过滤器正确无误。

如果您想要返回一行即使过滤器找不到任何内容,那么您还需要NOT EXISTSLEFT JOIN

DECLARE @ID VARCHAR(20) = '1234567890'

SELECT
    F.ID,
    Case 
        When Status=1 and isTaken=1 then 'Open'
        When Status=4 and isTaken=0 then 'Expire'
        When Status=2 and isTaken=0 then 'Pending'
        When Status=0 and isTaken=0 then 'Close'
    Else 'Not Available' End As 'Status' 
FROM
    (VALUES (@ID)) AS F(ID)
    LEFT JOIN Tickets AS C ON F.ID = C.Id