【问题标题】:Convert rows into columns using pivot in oracle 11g在 oracle 11g 中使用 pivot 将行转换为列
【发布时间】:2014-03-25 14:00:12
【问题描述】:

我想使用 PIVOT 函数将行转换为列。

示例如下

表格

EMP No   EMP Name
-------  --------
1         ABC
2         PQR

输出应该是

Col1         Col2
----         ----
Emp No         1
Emp Name       ABC
EMP No          2
Emp Name       PQR

我对循环没问题,但是我们应该使用 PIVOT,已经 serached 谷歌但是没有任何匹配的东西。

请建议并发送一些示例代码。

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    实际上根据您的要求,您需要unpivot,而不是pivot。但是为此,两列的数据类型应该相同,在这种情况下为字符

    with tab(emp_no, emp_name) as (
    select '1' ,'abc' from dual union all
    select '2' ,'PQR' from dual)
    ----
    --End of Data Perparation
    ----
    select * 
      from tab
    unpivot (col2 for col1 in ( emp_no as 'EMP No', emp_name as 'Emp Name'));
    

    输出

    |     COL1 | COL2 |
    |----------|------|
    |   EMP No |    1 |
    | Emp Name |  abc |
    |   EMP No |    2 |
    | Emp Name |  PQR |
    

    【讨论】:

      【解决方案2】:

      我不确定这是否可以使用 PIVOT 完成。您可以单独选择列并将它们联合起来。

      select 'Emp No' col1, emp_no col2 from tab
      union all
      select 'Emp Name', emp_name from tab;
      

      请注意,两列的数据类型应相同。否则,您需要转换/转换其中之一。

      此外,结果可能不是您想要的顺序。您需要明确指定 order by 子句。

      select col1, col2 from(
          select 'Emp No' col1, emp_no col2, emp_no from tab
          union all
          select 'Emp Name', emp_name, emp_no from tab
          )
      order by emp_no, case col1 when 'Emp No' then 1 else 2 end;
      

      sqlfidle.

      【讨论】:

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