Вот пример данных для тестовой таблицы, которую я имею
[childId] [parentId] [present]
1 10 0
2 11 1
3 NULL 0
4 NULL 0
NULL 10 0
Теперь для всех parentIds (включая те, которые имеют NULL) я хочу подсчитать все существующие childIds
select parentId, count(childId) as nbr
from TestTable
where present=1 or parentId is NULL
group by parentId
Результат, который я получаю:
parentId nbr
NULL 2
11 1
Одинаковое число (nbr
), которое я получаю как для подарка = 1, так и для подарка = 0.Кажется, я не могу навязать условие для сгруппированного значения NULL
.
В чем заключается ошибка, которую я совершаю, и каково решение для запроса, который я хочу сделать?
ОБНОВЛЕНИЕ :
Поскольку приведенный мною контрольный пример не является репрезентативным, пока я лучше не воссоздаю реальную ситуацию, я попытаюсь объяснить возникшую проблему.
Я создал представление с полным внешним соединением, поэтому у меня есть несколько записей, имеющих NULL
для childId
и некоторые записи, имеющие NULL
для parentId
.
Теперь я хочу перечислить все значения parentId
(и NULL
и не NULL
) и для каждой из них подсчитайте все записи, которые, например, имеют present=1
.Если я использую условие where present=1
, оно исключает значения NULL из набора результатов, т.е. у меня не будет записи результата NULL|x
для parentId|nbr
.
Я решил это с помощью union all
.В первом выборе у меня есть where present=1
, а во втором выборе у меня where present=1 and parentId is NULL
.
select parentId, count(childId) as nbr
from TestTable
where present=0
group by parentId
union all
select parentId, count(childId) as nbr
from TestTable
where present=0 and parentId is NULL
group by parentId
В результате я получаю
[parentId] [nbr]
NULL 2
10 1
NULL 2
Единственная проблема с этим (кроме дублированной записи для parentId=NULL
) заключается в том, что если нет записей с parentId=NULL
иpresent=1
, в результате у меня не будет записи с NULL | 0
для parentId|nbr
, и я хочу перечислить ВСЕ родительские идентификаторы, как NULL
, так и не NULL
.
Так что для подведения итогов мне нужно иметьэтот формат вывода для present=1
[parentId] [nbr]
NULL 0
10 0
11 1
и этот для present=0
[parentId] [nbr]
NULL 2
10 2
11 0
Любая помощь?