将列转换为行
Posted
技术标签:
【中文标题】将列转换为行【英文标题】:Convert Columns to ROW 【发布时间】:2013-04-30 05:28:39 【问题描述】:我坚持这个要求 -
我有一些格式的数据
(条目现在在同一行显示两个时期(2011 年 1 月)和(2011 年 2 月)的数据,而不是单独显示)。
最后我需要使用 dbms_output.put_line 命令打印数据。
我使用的是 Oracle 10.2g。
【问题讨论】:
SELECT ce_id,ce_nm,tmp_nm,Month, row_number() OVER ( 按月顺序按 rownum 分区) rn FROM ( select d.ce_id,d.ce_nm,b.tmp_nm,to_char(c.log_ts ,'MON.YYYY') Month , sum (c.total_enters) 从 v_ce_tmp a,ttmp b,mv_tmp_daily_traffic c,tce d 输入,其中 a.tmp_id=c.tmp_id and b.tmp_id=c.tmp_id and d.ce_id=a '01-Jan-2011' 和 '28-Feb-2011' 和 a.ce_id=286 之间的 .ce_id 和 c.log_ts 由 d.ce_id,d.ce_nm,to_char(c.log_ts,'MON.YYYY') 分组,b.tmp_nm 排序 to_char(c.log_ts,'MON.YYYY') DESC ) 【参考方案1】:Oracle 10g 没有 PIVOT 函数,但您可以使用带有 CASE
表达式的聚合函数将数据行转换为列。基本语法是:
select d.id,
d.site,
d.entrance,
sum(case when d.date = 'Jan.2011' then enters else 0 end) "Jan.2011",
sum(case when d.date = 'Feb.2011' then enters else 0 end) "Feb.2011"
from
(
select id, site, entrance, date, enters
from yourdata
) d
group by d.id, d.site, d.entrance;
注意:您可以将带有yourdata
的子查询替换为您当前的查询。
【讨论】:
以上是关于将列转换为行的主要内容,如果未能解决你的问题,请参考以下文章