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