Oracle 11G中的Cross Tab PIVOT查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 11G中的Cross Tab PIVOT查询相关的知识,希望对你有一定的参考价值。

我有一张桌子如下

CODE        PH_NUMBER     SUM(S.DURATION)   MIN(T.START_TIME)   CAMPAIGN
35039663    9250993319    120               19-Dec-17            297
35039725    917050139125  50                19-Dec-17            68
35039725    917050139125  370               19-Dec-17            297
35039726    919470833038  3370              19-Dec-17            68
35039726    919470833038  390               19-Dec-17            297

我需要的是

code        Ph_number     sum(duration) Min(start_time) 297_count 68_count
35039663    9250993319    120             19-Dec-17          1       0
35039725    917050139125  50+370          19-Dec-17          1       1
35039726    919470833038  3370+390        19-Dec-17          1       1  

如何在Oracle 11G中实现这一目标?谢谢

答案

你可以通过sum decode(不需要使用pivot条款)来轻松使用它:

select code, ph_number,
   sum(duration) "Total Duration", 
   min(to_char(start_time,'dd-Mon-yy')) "Min Start Time",
   sum(decode(campaign,297,1,0)) "297_count",
   sum(decode(campaign,68,1,0)) "68_count"
  from mytable
 group by code, ph_number
 order by code;

顺便说一句,在ph_number表达式中使用列group by没有问题,因为它的值对于单个code列重复。

D e m o

以上是关于Oracle 11G中的Cross Tab PIVOT查询的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 11g 安装过程

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

Oracle linux 6.3 安装11g R2 RAC on vbox

oracle FIND_IN_SET函数

oracle 11g 中的重置序列

Oracle 11g 中的限制子句