使用数据透视在 Oracle 中显示列名

Posted

技术标签:

【中文标题】使用数据透视在 Oracle 中显示列名【英文标题】:display column names in Oracle using pivot 【发布时间】:2017-08-25 12:14:01 【问题描述】:

我试图在 4 列中显示 ename,即 MANAGERSALESMANANALYSTCLERK 在 oracle 11g 中的 SCOTT 模式中,其中只有经理的姓名才能获得显示在第 1 列,推销员在第 2 列,依此类推。

到目前为止,我已经这样做了:

select * 
  from (select job,
               ename 
          from emp) 
 pivot (listagg(ename,',') within group(order by ename) 
   for job in ('MANAGER','CLERK','ANALYST','SALESMAN'))

这给了我想要的结果,但我想要不同的行而不是单个列的值中的多个值

任何人都可以帮助我在 PIVOT 的新列中显示列名,因为它只显示聚合函数,这些函数通常返回我想要多行的单行。

非常感谢。

【问题讨论】:

尝试删除listagg函数 @l3rutt 而我应该使用什么来代替?你看 pivot 期望在那个位置有一个聚合函数。 【参考方案1】:

如果不想总结,我建议使用decode:

select decode(job,'MANAGER',ename) Manager, 
       decode(job,'CLERK',ename) CLERK, 
       decode(job,'CLERK',ename) CLERK,
       decode(job,'SALESMAN',ename) SALESMAN
from emp;

【讨论】:

它给出了一个非格式化的输出。我希望所有列都用数据填充任何行。如果其他列有数据,那么其余列应该显示“null”,我想这只会发生在最后几行。 能否用所需的输出更新问题

以上是关于使用数据透视在 Oracle 中显示列名的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 11g:取消透视多个列并包含列名

sql 在postgresql中使用动态列名创建交叉表/数据透视表形式的hstore字段

使用子查询 oracle sql 进行数据透视

laravel 雄辩的数据透视表查询“不明确的列名”

删除列名的后缀并取消透视

SQL 列名是一个数据并且反透视不起作用