天天看點

通過sql實作動态行轉列

上一章我們講了固定行轉列,本章我們就将一下怎麼動态實作行轉列的。因為有時候需要行專列的值有成千上萬條,不可能再用固定行轉列的方法,否則你一定會崩潰掉的。好了,廢話不多說,開始吧!

常見一張表tmp_test,内容如下:

實作代碼:

create or replace procedure p_test is

v_sql varchar2(2000);

cursor cursor_1 is

select distinct subject from tmp_test order by subject;

begin

v_sql := 'select username';

for v_subject in cursor_1 loop

v_sql := v_sql || ',' ||'sum(decode(subject,''' ||v_subject.subject ||''',source)) as ' ||v_subject.subject;

dbms_output.put_line(v_sql);

end loop;

v_sql := vql || ' from tmp_test group by username';

v_sql := 'create or replace view test_result as ' || v_sql;

execute immediate v_sql;