基本上我試圖在這個多維數據集結果中獲得不同的計數。但不幸的是,您不能使用Count(distinct(Field))與cube和rollup(as stated here)SQL Sever使用「分組...使用多維數據集」得到不同計數
以下是數據看起來像什麼。 (這只是一個簡單的例子,我期望在數據複製)
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
@ chezy525 ....不錯的做法...我喜歡它。它顯然比工會更有效率。仍然比我喜歡的更雜亂,但它的工作原理。 – 2010-11-12 18:29:09
謝謝!這是我星期五的一個有趣的轉換!我認爲任何解決方案將會比應該「更雜亂」,沒有明確的總體支持... – chezy525 2010-11-12 19:21:19
你最後的選擇是相同的,我最終會得到它,它是最優雅的一個,它的表最少以獲得結果。就我的執行計劃而言,根據Category1,Category2和ItemID的索引,查詢會盡可能快地進行。 – cairnz 2010-11-12 22:48:07