Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择不同粒度级别的数据(Oracle中的分组集)_Sql_Oracle - Fatal编程技术网

Sql 选择不同粒度级别的数据(Oracle中的分组集)

Sql 选择不同粒度级别的数据(Oracle中的分组集),sql,oracle,Sql,Oracle,我需要选择不同粒度级别的数据(在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 da

我需要选择不同粒度级别的数据(在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

我发现这很不寻常,因为我需要选择最低粒度级别和聚合级别的数据。我该怎么做呢?

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

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;

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

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;

您可以从以下内容开始:

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)

请参阅其他示例和说明。

您可以从以下内容开始:

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)


请参阅其他示例和说明。

我看不到新订单的任何逻辑…您是否尝试过在Oracle中使用CONNECT BY运算符。不确定使用方法,但听说它很有用,因为结果包含层次结构。我看不出新订单的任何逻辑…您是否尝试过在Oracle中使用CONNECT BY运算符。不确定用法,但听说它很有用,虽然结果包含层次结构。你有我的问题,但我需要保留顺序。由于“a1”、“a2”属于“a”类,a1、a2的数据应继承“a”类的数据,b1、b2的数据应继承“b”类的数据,依此类推。@chemicalkt-您是否保证数据将按照样本数据的字母顺序排序?如果没有,如何知道是先返回
a
行还是先返回
b
行?a或b行可以按任何顺序返回,但a1、a2应在a之后返回,b1、b2应在b之后返回。您有我的问题,但我需要保留顺序。由于“a1”、“a2”属于“a”类,a1、a2的数据应继承“a”类的数据,b1、b2的数据应继承“b”类的数据,依此类推。@chemicalkt-您是否保证数据将按照样本数据的字母顺序排序?如果没有,你怎么知道是先返回
a
行还是先返回
b
行?a或b行可以按任何顺序返回,但a1、a2应该在a之后返回,b1、b2应该在b之后返回。你完全明白我的问题。但我正在尝试选择c1或c2,因为我需要选择c2作为最低级别的数据,选择c1作为聚合数据。我说过这是一个开始。您可以
选择nvl(c2、c1)、sum(c3)、sum(c4)
我在订购数据时遇到问题。使用c1 asc的
顺序,分组(c2)desc
a
a2
a1
b
b2
b1
的顺序给出数据。按c1 asc使用
顺序时,分组(c2)asc
a1
a2
a
b1
b2
b
b
.a2和a1具有相同的分组。添加列c2:
按c1 asc排序,分组(c2)说明,c2 asc
您正好遇到了我的问题。但我正在尝试选择c1或c2,因为我需要选择c2作为最低级别的数据,选择c1作为聚合数据。我说过这是一个开始。您可以
选择nvl(c2、c1)、sum(c3)、sum(c4)
我在订购数据时遇到问题。使用c1 asc的
顺序,分组(c2)desc
a
a2
a1
b
b2
b1
的顺序给出数据。按c1 asc使用
顺序时,分组(c2)asc
a1
a2
a
b1
b2
b
b
.a2和a1具有相同的分组。添加列c2:
按c1 asc排序,分组(c2)说明,c2 asc