Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止在此TSQL中返回所有空值?_Sql_Sql Server_Tsql_Null_Isnull - Fatal编程技术网

如何防止在此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的空值,或

我有一个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 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
更清晰。不,没有计算;只是这三个字段的唯一组合列表。