不等于Null在sql server中不起作用

时间:2017-04-19 03:21:42

标签: sql sql-server

我在下面给出了一个查询

       SELECT 
            B.[Date],           
            B.[Detail],
            B.[Number],
            B.[Total],
            CASE WHEN B.[ApId] != null THEN Ap.Name ELSE B.[Name]END Name,
        FROM [Bacs] B
        LEFT JOIN Table ap ON b.ApId= ap.Id

Case When查询中,我尝试根据Name值返回b.ApId。 但即使b.ApId不为空,我也会收到B.Name而不是Ap.Name

任何人都可以指出我出错的地方。

2 个答案:

答案 0 :(得分:2)

!=将评估值,而NULL不是值。

因此,您必须使用IS NULLIS NOT NULL来比较空值。

SELECT 
            B.[Date],           
            B.[Detail],
            B.[Number],
            B.[Total],
            CASE WHEN B.[ApId] is not null THEN Ap.Name ELSE B.[Name]END Name,
        FROM [Bacs] B
        LEFT JOIN Table ap ON b.ApId= ap.Id

答案 1 :(得分:1)

使用IS NOT NULLIS NULLNULL值进行比较,或使用ISNULLCOALESCE函数

SELECT 
        B.[Date],           
        B.[Detail],
        B.[Number],
        B.[Total],
        CASE WHEN B.[ApId] IS NOT NULL THEN Ap.Name ELSE B.[Name] END Name
        -- ISNULL(Ap.Name, B.[Name]) as Name
        -- COALESCE(Ap.Name, B.[Name],'') as Name
    FROM [Bacs] B
    LEFT JOIN Table ap ON b.ApId= ap.Id