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

How can I prevent all Null values from being returned in this TSQL?

我有这个 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 值或两者兼而有之。

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

我不想使用这样的东西:

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

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

将您的 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 中没有 Aggregate 时,Sql 服务器足够聪明,可以将 group by 转换为 distinct