2017-04-19 48 views
0

没有工作,我有以下不等于空在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查询我想基础上,b.ApId值返回Name。 但即使b.ApId不为空我得到B.Name而不是Ap.Name

任何人都可以指出我要去哪里错了。

+3

为null,则使用'IS NULL'或'比较IS NOT NULL'(除非'ANSI_NULLS'是关闭,但我不会推荐这么做)。 – ZLK

+0

@ZLK工作得很好。你可以添加它作为答案。以便我可以将其标记为答案。 –

回答

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

使用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