如何防止在此TSQL中返回所有空值?
我有一个TSQL:如何防止在此TSQL中返回所有空值?,sql,sql-server,tsql,null,isnull,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的空值,或
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的空值,或者两者都包含
我只想要没有空值的记录。我需要做什么来防止在结果集中返回具有任何空值的记录
我不想用这样的东西:
SELECT IsNull(Invd.Unit, 'no Unit'), IsNull(M.MemberName, 'no Member Name'), Invd.Description
. . .
我只是根本不想要那些唱片;我只需要这三个字段的唯一/不同组合(不包括其中任何字段中的空值-数据仅在所有三个值都存在的情况下才有用)。使用
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
而不是groupby
,这将明确意图。当选择中没有聚合时,Sql server足够智能,可以将分组依据
转换为不同的
使用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
而不是groupby
,这将明确意图。当Select
中没有聚合时,Sql server足够智能,可以将groupby
转换为distinct
我想这里使用groupby
来删除duplicates@VR46:Claro que si.我以为DISTINCT()只能在一列上执行。@B.ClayShannon DISTINCT适用于行,不是单个列。我想这里使用groupby
来删除duplicates@VR46:Claro que si.我以为DISTINCT()只能在一列上执行。@B.ClayShannon DISTINCT适用于行,不是单个列。如果您没有实际计算聚合值,那么DISTINCT
在这里比GROUP BY
更清晰。不,没有计算;仅列出这三个字段的唯一组合。如果您没有实际计算聚合值,那么DISTINCT
将比GROUP BY
更清晰。不,没有计算;只是这三个字段的唯一组合列表。