3,491
社区成员
发帖
与我相关
我的任务
分享
--创建过程
create or replace procedure normalize AUTHID CURRENT_USER is
max_id_num number;
sqlstr varchar2(2500);
begin
select max(count(1))into max_id_num from test group by GM;
for r in 1..max_id_num loop
sqlstr:= sqlstr ||','|| 'MAX(CASE rk WHEN ' ||r|| 'THEN id ELSE NULL END) AS ID'||r;
end loop;
sqlstr := 'create or replace view v_test as SELECT gm,count(1) cnt'|| sqlstr || ' FROM (
SELECT
gm,
ID,
ROW_NUMBER() OVER(PARTITION BY test.gm ORDER BY gm) rk
FROM test
)
GROUP BY gm ORDER BY gm' ;
execute immediate sqlstr;
end normalize;
--执行过程
begin
normalize;
end;
--查看结果
select * from v_test;