从col2为NULL的col选择分组

时间:2019-02-12 12:33:47

标签: sql sql-server group-by

我必须通过在MS SQL服务器中执行一些SQL来编写报告。我的数据是这样的:

UserID,Country, CommNumber
00001, IN, 1001
00002, IN, NULL
00003, US, 1002
00004, US, 1003
00005, DE, NULL
00006, DE, NULL
00007, US, NULL

现在,我想列出所有CommNumbers为NULL的国家/地区列表。即使一个用户在该国家/地区拥有CommNumber,我也不希望该国家/地区出现在列表中。因此,仅在上面查看DE,所有两个用户的CommNumber都为NULL。美国和印度至少有一个用户的CommNumber不为NULL。

希望这个问题有意义。

我的尝试是:

SELECT
[COUNTRY]
,COUNT(*) AS 'COMMNUMBER_USERS'
FROM
<TABLENAME> 
WHERE [COMMNUMBER] IS NULL
GROUP BY [C]
ORDER BY [COMMNUMBER_USERS]

以上没有给我正确的结果。我理解为什么,因为我没有办法告诉我,我只希望所有comnnumbers为空的国家/地区。

4 个答案:

答案 0 :(得分:0)

您可以简单地使用group byhaving

select country
from t
group by country
having max(commnumber) is null;

答案 1 :(得分:0)

您可以尝试使用相关子查询

select * from tablename a where not exists 
   (select 1 from tablename b where a.country=b.country and b.commnumber is not null)

答案 2 :(得分:0)

我会使用NOT EXISTS

SELECT t.*
FROM table t
WHERE NOT EXISTS (SELECT 1 FROM table t1 WHERE t1.Country = t.Country AND t1.CommNumber IS NOT NULL);

如果只需要Country,则可以进行汇总:

select country
from table t
group by country
having max(commnumber) is null;

答案 3 :(得分:0)

选择国家 从表名 按国家分组 HAVING sum(ISNULL(Commnumber,0))= 0

您也可以使用此