有如下数据:
menu_id pgm_id cname role_id
M0000 | pvi08 | test_1 | Z2
M0000 | pvi08 | test_1 | Z3
M0000 | pvi08 | test_1 | Z31
M0000 | pvi08 | test_1 | Z6
M0000 | pvi08 | test_1 | Z7
M0000 | fc018 | test_2 | Z00Z
M0000 | fc018 | test_2 | Z3211我想要得到以下结果:
M0000 pvi08 test_1 Z2 Z3 Z31 Z6 Z7
M0000 fc018 test_2 Z00Z Z3211通过自己建的存储过程失败,求方法!!!
menu_id pgm_id cname role_id
M0000 | pvi08 | test_1 | Z2
M0000 | pvi08 | test_1 | Z3
M0000 | pvi08 | test_1 | Z31
M0000 | pvi08 | test_1 | Z6
M0000 | pvi08 | test_1 | Z7
M0000 | fc018 | test_2 | Z00Z
M0000 | fc018 | test_2 | Z3211我想要得到以下结果:
M0000 pvi08 test_1 Z2 Z3 Z31 Z6 Z7
M0000 fc018 test_2 Z00Z Z3211通过自己建的存储过程失败,求方法!!!
M0000 | fc018 | test_2 | Z00Z Z3211
这样的话,不是行列转换,而是字段连接(可用两种方法)如果最后那列也要分多个字段,就如楼上所说的,可能还要动态建表
menu_id out varchar2,
PGM_ID out varchar2,
CNAME out varchar2)as
str_sql varchar2(500);
begin
str_sql:= 'SELECT '||menu_id|| PGM_ID||'WM_CONCAT('||CNAME||')'||CNAME||'FROM menupgm';
execute immediate str_sql;
end ;
/
SQL*Plus: Release 3.3.4.0.0 - Production on Thu Apr 09 14:05:02 2009Copyright (c) Oracle Corporation 1979, 1996. All rights reserved.
硈:
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - ProductionSQL> var results refcursor;
SQL> exec public_mgr.pkg_test.prc_test(results);
begin public_mgr.pkg_test.prc_test(results); end; *
第1行發生錯誤:
ORA-06550: 第1行, 第36個欄位:
PLS-00201: 識別字 'RESULTS' 必須被宣告
ORA-06550: 第1行, 第7個欄位:
PL/SQL: Statement ignored
SQL>
------------------------------------------------------------------------------A1,A2,A3
B1,B4,B2,B3
C1,C2SQL> select name,dept from a;NAME DEPT
------ ------
A A1
A A2
A A3
B B1
B B2
B B3
B B4
C C1
C C2已选择9行。SQL> select WM_CONCAT(dept) from a group by name;WM_CONCAT(DEPT)
------------------------------------------------------------------------------A1,A2,A3
B1,B4,B2,B3
C1,C2
from tab group by menu_id,pgm_id,cname
select menu_id,pgm_id,cname,
sum(case role_id when 'Z2' then Z2 else 自己根据设置值 end) as Z2,
sum(case role_id when 'Z3' then Z3 else 自己根据设置值 end) as Z3,
sum(case role_id when 'Z31 ' then Z31 else 自己根据设置值 end) as Z31,
..................
from xxx
group by menu_id,pgm_id,cname....
除了sum中的项
如果是8i版本的怎么写? 没有wmsys.wmconcat这个函数
SYS_CONNECT_BY_PATH 是9i的吧?....
M0000 fc018 test_2 Z00Z Z3211
问的不清楚 还要考虑你的想法 累
1 Z2 Z3 Z31 Z6 Z7 放一个字段里用空格阁开??
2 动态生成字段 存在不同的字段中都可以实现