我必须通过在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为空的国家/地区。
答案 0 :(得分:0)
您可以简单地使用group by
和having
:
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
您也可以使用此