выбрать группу из col, где col2 равно NULL - PullRequest
0 голосов
/ 12 февраля 2019

Я должен написать отчет, выполнив несколько SQL на сервере MS 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 имеет всех двух пользователей с NULL на CommNumber.В США и IN есть хотя бы один пользователь, у которого CommNumber не равен NULL.

Надеюсь, этот вопрос имеет смысл.

Моя попытка:

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

Выше не даномне правильные результаты.Я понимаю почему, потому что у меня нет возможности сказать, что мне нужны только страны, в которых все числа равны нулю.

Ответы [ 4 ]

0 голосов
/ 12 февраля 2019

ВЫБРАТЬ Страну из имени таблицы ГРУППА ПО СТРАНЕ ИМЕЮЩАЯ сумма (ISNULL (Commnumber, 0)) = 0

Вы также можете использовать это

0 голосов
/ 12 февраля 2019

Вы можете попробовать использовать коррелированный подзапрос

select * from tablename a where not exists 
   (select 1 from tablename b where a.country=b.country and b.commnumber is not null)
0 голосов
/ 12 февраля 2019

Я бы использовал 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;
0 голосов
/ 12 февраля 2019

Вы можете просто использовать group by и having:

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