将列转换为行

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

【讨论】:

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

MySQL将列转换为行

SQL 将列转换为行

将列值转换为行值

Postgres 表选择多列并将结果(列)动态转换为行 - 将列转置为行

sql 将列数据转换为行

PostgreSQL 将列转换为行?转置?