当前位置: 代码迷 >> Oracle技术 >> 列转换为行解决方法
  详细解决方案

列转换为行解决方法

热度:53   发布时间:2016-04-24 08:32:50.0
列转换为行
现有数据表如下:
组名称 值 排序
group1 S 1
group1 M 2
group1 L 3
group2 100 1
group2 110 2


想实现查询结果如下 :
组名称 列1 列2 列3 ....
group1 S M L
group2 100 110 (null)

数据表的记录是不固定的。比如group2会有 120,130等等。

我在网上找来一下,怎么都实现不了我要的效果, 求高手解答。立马给分

------解决方案--------------------
SQL code
--建表create table Tmp_tt(组名称 varchar2(20),值 varchar2(10),排序 number);--插入数据insert into Tmp_ttselect 'group1','S',1 from dualunion allselect 'group1','M',2 from dualunion allselect 'group1','L',3 from dualunion allselect 'group2','100',1 from dualunion allselect 'group2','110',2 from dualunion allselect 'group2','120',3 from dualunion allselect 'group2','130',4 from dual;--创建存储过程create or replace procedure tmp_colToRow(  data_set out SYS_REFCURSOR)AS   v_sql varchar2(5000);   v_tt   varchar2(5000);begin     v_sql := 'SELECT 组名称';     for x in (select 排序 from Tmp_tt group by 排序 order by 排序)     loop         v_tt := v_tt || ',MAX(decode(排序,'||to_char(x.排序)||',值,NULL)) 列'||to_char(x.排序);     end loop;     v_sql := v_sql || v_tt ||' from Tmp_tt group by 组名称 order by 组名称';     --DBMS_OUTPUT.PUT_LINE(v_sql);     open data_set for v_sql;end;--执行存储过程exec tmp_colToRow(:v);
------解决方案--------------------
列数无法固定的时候,通过过程,动态获得列数,拼接行转列。

具体方法楼上的已经给了。
  相关解决方案