В основном я пытаюсь получить отчетливое количество в пределах этого кубического результата. Но, к сожалению, вы не можете использовать Count (отличное (Поле)) с кубом и сверткой ( как указано здесь )
Вот как выглядят данные. (Это просто простой пример, я действительно ожидаю дубликатов в данных)
Category1 Category2 ItemId
a b 1
a b 1
a a 1
a a 2
a c 1
a b 2
a b 3
a c 2
a a 1
a a 3
a c 4
Вот что я хотел бы сделать, но это не работает.
SELECT
Category1,
Category2,
Count(Distinct(ItemId))
FROM ItemList IL
GROUP BY
Category1,
Category2
WITH CUBE
Я знаю, что я могу выполнить подвыбор, подобный этому, чтобы получить желаемые результаты:
SELECT
*,
(SELECT
Count(Distinct(ItemId))
FROM ItemList IL2
WHERE
(Q1.Category1 IS NULL OR Q1.Category1 IS NOT NULL AND Q1.Category1 = IL2.Category1)
AND
(Q1.Category2 IS NULL OR Q1.Category2 IS NOT NULL AND Q1.Category2 = IL2.Category2))
AS DistinctCountOfItems
FROM (SELECT
Category1,
Category2
FROM ItemList IL
GROUP BY
Category1,
Category2
WITH CUBE) Q1
Но это работает медленно, когда набор результатов велик из-за подвыбора. Есть ли какой-либо другой способ получить отчетливое число из результата в кубе?
Это результат, который я хочу видеть
Category1 Category2 DistinctCountOfItems
a a 3
a b 3
a c 3
a NULL 4
NULL NULL 4
NULL a 3
NULL b 3
NULL c 3