2013-04-30 61 views
2

我坚持这一要求 -列转换为行

我在格式一些数据

enter image description here

(条目现在显示了两个周期(数据2011年1月)和(2月。2011)与同意分开出现在同一行)。

最后我需要使用dbms_output.put_line命令打印数据。

我使用的是Oracle 10.2g。

+0

SELECT ce_id,ce_nm,tmp_nm,月, ROW_NUMBER()OVER(分区按月为了通过ROWNUM)氡 FROM ( 选择d.ce_id,d.ce_nm,b.tmp_nm,TO_CHAR(C。 log_ts, 'MON.YYYY')月,总和(c.total_enters)从v_ce_tmp A进入 ,TTMP b,mv_tmp_daily_traffic C,TCE d 其中a.tmp_id = c.tmp_id和 \t \t \t b.tmp_id = C。 tmp_id和 d.ce_id = a.ce_id和 \t \t \t c.log_ts'01-Jan-2011'和'28 -Feb-2011'之间以及 a.ce_id = 286 group by d.ce_id,d.ce_nm,to_char(c.log_ts,'MON.YYYY'),b.tmp_nm order by to_char(c.log_ts,'MON.YYYY')DESC ) – redsoxlost 2013-04-30 08:37:56

回答

0

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与您当前的查询替换子查询。