【问题标题】:SQL turn rows into columnsSQL 将行变成列
【发布时间】:2021-07-19 23:34:40
【问题描述】:

您好,是否可以将行值转换为列。 我正在使用 ORACLE SQL,我想将月份转换为具有 kpi 值的列,如下所示。 我尝试了分区和合并语句,但似乎没有任何效果。 我真的很感激一些帮助。 提前谢谢你。

输入数据:

department year month kpi value
A 2000 1 sales 5000
A 2000 1 revenue per client 120
A 2000 2 sales 6000
A 2000 2 revenue per client 140

期望的输出:

department year kpi 1 2
A 2000 sales 5000 6000
A 2000 revenue per client 120 140

【问题讨论】:

    标签: sql oracle oracle11g pivot procedure


    【解决方案1】:

    您可以使用pivot 这样做:

    架构和插入语句:

     create table mytable (department varchar(20),year int,month int,kpi varchar(50),value int);
    
     insert into mytable values('A',    2000,   1,  'sales' ,5000);
     insert into mytable values('A',    2000,   1,  'revenue per client',   120); 
     insert into mytable values('A',    2000,   2,  'sales' ,6000);
     insert into mytable values('A',    2000,   2,  'revenue per client',   140);
    

    查询:

     select * from (
     select department,year,month,kpi,value
     from mytable
     )
     pivot
     (
         max(value)
         for month  in (1,2)
     )
    

    输出:

    DEPARTMENT YEAR KPI 1 2
    A 2000 revenue per client 120 140
    A 2000 sales 5000 6000

    dbhere

    【讨论】:

    • 请在这里分享表结构?或者如果这已经是另一个问题,那么链接。
    • 第二个问题我已经解决了,谢谢。
    • 太好了。最良好的祝愿。
    【解决方案2】:

    您可以使用条件聚合:

    select department, year, kpi,
           max(case when month = 1 then value end) as month_1,
           max(case when month = 2 then value end) as month_2
    from t
    group by department, year, kpi;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多