【发布时间】:2011-05-04 16:10:53
【问题描述】:
基本上,我试图在这个立方结果中获得不同的计数。但不幸的是,您不能将 Count(distinct(Field)) 与多维数据集和汇总一起使用 (as stated here)
这是数据的样子。 (这只是一个简单的例子,我确实希望数据中有重复)
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
【问题讨论】:
标签: sql sql-server tsql sql-server-2000 group-by