B. *_*non 0 sql t-sql sql-server 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
Run Code Online (Sandbox Code Playgroud)
...对于返回的90%(除了令人痛苦的慢)之外效果很好,但大约10%的返回记录包含Invd.Unit或M.MemberName或两者的Null值.
我只想要任何地方没有Null的记录.我需要做什么来防止在结果集中返回包含任何空值的记录?
我不想使用这样的东西:
SELECT IsNull(Invd.Unit, 'no Unit'), IsNull(M.MemberName, 'no Member Name'), Invd.Description
. . .
Run Code Online (Sandbox Code Playgroud)
我根本不想要那些记录; 我只想要这三个字段的唯一/不同组合(不包括任何一个中的空值 - 数据仅在存在所有三个值的情况下才有用).
更改您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
Run Code Online (Sandbox Code Playgroud)
正如评论中所提到的,最好使用Distinct而不是Group by明确意图.当没有聚集在SelectSQL服务器是足够聪明,转换group by到distinct