将列反转为行(oracle)

Posted

技术标签:

【中文标题】将列反转为行(oracle)【英文标题】:Unpivot columns into rows (oracle) 【发布时间】:2016-12-16 14:35:40 【问题描述】:

很像原来的 SO Pivoting rows into columns dynamically in Oracle

但我想反其道而行之

我怎样才能得到

 ID       NAME    AGE    GENDER  STATUS
----     -----   -----  ------  --------
  1      Bob      30     male 
  2      Susan                   married

进入这个

ID       K       V
----     -----   -----
  1      name    Bob
  1      age     30
  1      gender  male
  2      name    Susan
  2      status  married

【问题讨论】:

我想你在找UNPIVOT 【参考方案1】:

您正在寻找unpivot

select * from t 
unpivot (
          v for k in ("NAME","AGE","GENDER","STATUS")
        ) u

如果年龄列是整数,则可能存在类型不匹配。在这种情况下,在取消透视之前将其转换为字符。

select *
from (select id,name,to_char(age) age,gender,status from t) t 
unpivot (
         v for k in ("NAME","AGE","GENDER","STATUS")
        ) u

【讨论】:

以上是关于将列反转为行(oracle)的主要内容,如果未能解决你的问题,请参考以下文章

oracle 10g如何将列转换为行

oracle sql 11G中如何将列转置为行

Oracle SQL-将列转换为行,同时保留一列

oracle如何在没有UNION的情况下将列转置为行

oracle pl sql中如何将列数据转置为行

在Oracle中将列转换为行[重复]