如何防止在此TSQL中返回所有Null值?

时间:2016-01-27 17:26:36

标签: sql sql-server tsql null isnull

我有这个TSQL:

SELECT Invd.Unit, M.MemberName, Invd.Description
FROM InvoiceDetail Invd
LEFT JOIN Members M on Invd.MemberNo = M.MemberNo
GROUP BY Invd.Unit, M.MemberName, Invd.Description

...适用于90%返回的内容(除了令人痛苦的慢),但大约10%的返回记录包含Invd.Unit或M.MemberName或两者的Null值。

我只想要任何地方都没有Null的记录。我需要做什么来防止在结果集中返回任何空值的记录?

我不想使用这样的东西:

SELECT IsNull(Invd.Unit, 'no Unit'), IsNull(M.MemberName, 'no Member Name'), Invd.Description
. . .

我根本不想要那些记录;我只想要这三个字段的唯一/不同组合(不包括任何一个中的空值 - 数据仅在存在所有三个值的情况下才有用)。

1 个答案:

答案 0 :(得分:5)

使用LEFT Join条件

INNER Join更改为Where
SELECT Invd.unit, 
       M.membername, 
       Invd.description 
FROM   invoicedetail Invd 
       INNER JOIN members M 
               ON Invd.memberno = M.memberno 
WHERE  Invd.unit IS NOT NULL 
       AND M.membername IS NOT NULL 
       AND Invd.description IS NOT NULL 
GROUP  BY Invd.unit, 
          M.membername, 
          Invd.description 

正如评论中所提到的,最好使用Distinct代替Group by,这样可以明确意图。如果Select中没有聚合,则Sql服务器足够聪明,可以将group by转换为distinct