Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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 Pivot-多级转换_Sql_Oracle_Oracle11g_Pivot - Fatal编程技术网

Sql Oracle Pivot-多级转换

Sql Oracle Pivot-多级转换,sql,oracle,oracle11g,pivot,Sql,Oracle,Oracle11g,Pivot,我有以下数据 C1 C2 C3 c4 1 C 1 2 1 M 0 2 2 C 2 3 2 M 4 3 我想把它当作一个支点 C1 C2 C3 C4 C5 # C C M M 1 1 2 0 2 2 2 3 4 3 我怎样才能做到这一点 逻辑: 它应该始终在C1级别分组。 C2数据将是C3和C4中数据的列标题。您可以在以下查询中使用条件聚合: with t(C1, C2, C3, C

我有以下数据

C1  C2  C3  c4

1   C   1   2
1   M   0   2
2   C   2   3
2   M   4   3
我想把它当作一个支点

C1  C2  C3  C4  C5
#   C   C   M   M
1   1   2   0   2
2   2   3   4   3
我怎样才能做到这一点

逻辑: 它应该始终在C1级别分组。
C2数据将是C3和C4中数据的列标题。

您可以在以下查询中使用条件聚合:

with t(C1, C2, C3, C4) as
(
 select 1,'C',1,2 from dual union all
 select 1,'M',0,2 from dual union all
 select 2,'C',2,3 from dual union all
 select 2,'M',4,3 from dual   
)
  select null as C1, min(C2) as C2, min(C2) as C3, max(C2) as C4, max(C2) as C5
    from t
  union all  
  select C1, 
         to_char(sum(case when C2='C' then C3 end)),
         to_char(sum(case when C2='C' then C4 end)),
         to_char(sum(case when C2='M' then C3 end)),
         to_char(sum(case when C2='M' then C4 end))
    from t
   group by C1;

 C1  C2  C3  C4  C5
 --  --  --  --  --
     C   C   M   M
 1   1   2   0   2
 2   2   3   4   3

您能解释一下从您的输入数据中获得预期输出的逻辑吗?在您提出的回答“假设C2中有多个值,例如:a,B…Z”下的一条评论中。如果这是一个对您很重要的案例,您应该编辑您的问题以包含此类数据,并显示您期望从中得到的结果。您好,假设C2中有多个值,例如:a,B…Z,那么第一行和其余行之间没有相关性。@RamKumar是的,您是对的。它解决了你问题中的问题。但是不可能考虑一个动态的解决方案,只要你需要保留第一行(比如<代码>空,C,C,M,M< /代码>)@ RamKumar——你就可以发布一个有代表性的测试数据样本,包括边缘情况。要求人们提供解决方案,然后说“啊,是的,但是我以前没有提到的其他条件呢?”是不合理的