如何防止在此 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
我有这个 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