0

我需要选择不同粒度级别的数据(在 Oracle 中)。我有一个数据表:

c1  c2  c3  c4
a   a1  10  5
a   a2  10  5
b   b1  10  5
b   b2  10  5

我需要编写一个返回数据的查询:

c1  c2  c3
a   20  10   --aggregated data
a1  10  5    --lowest granular level data
a2  10  5    --lowest granular level data
b   20  10
b1  10  5    -- data of b1, b2 should follow the data of b; likewise a1, a2 should follow data of a
b2  10  5

我发现这很不寻常,因为我需要同时选择最低粒度级别和聚合级别的数据。我怎样才能做到这一点?

4

2 回答 2

2

很难确定,因为您没有告诉我们如何从一个数据集到另一个数据集。不过,我的猜测是,您想要类似的东西

SELECT c1, sum(c3) c2, sum(c4) c3
  FROM table_name
 GROUP BY c1
UNION ALL
SELECT c2, sum(c3), sum(c4)
  FROM table_name
 GROUP BY c2;
于 2012-08-22T05:24:24.627 回答
1

你可以从这里开始:

SELECT C1, C2, sum(c3), sum(c4), grouping_id(c1, c2)
FROM table_name
group by rollup(c1,c2)

只获取您需要的群组

SELECT C1, C2, sum(c3), sum(c4), grouping_id(c1, c2)
FROM table_name
group by GROUPING SETS ( (c1, c2), c1)

在这里看到另一个例子和解释。

于 2012-08-22T06:06:53.367 回答