上一章我們講了固定行轉列,本章我們就將一下怎么動態(tài)實現(xiàn)行轉列的。因為有時候需要行專列的值有成千上萬條,不可能再用固定行轉列的方法,否則你一定會崩潰掉的。好了,廢話不多說,開始吧!
常見一張表tmp_test,內容如下:
成都創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)品牌建設與網(wǎng)絡營銷,包括成都網(wǎng)站建設、做網(wǎng)站、SEO優(yōu)化、網(wǎng)絡推廣、整站優(yōu)化營銷策劃推廣、電子商務、移動互聯(lián)網(wǎng)營銷等。成都創(chuàng)新互聯(lián)為不同類型的客戶提供良好的互聯(lián)網(wǎng)應用定制及解決方案,成都創(chuàng)新互聯(lián)核心團隊十載專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經(jīng)驗,為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設服務,在網(wǎng)站建設行業(yè)內樹立了良好口碑。
實現(xiàn)代碼:
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';
dbms_output.put_line(v_sql);
v_sql := 'create or replace view test_result as ' || v_sql;
execute immediate v_sql;
end;
存儲過程已經(jīng)寫好了,開始調用存過:
begin
p_test;
end;
查詢視圖test_result:
代碼實現(xiàn):
select * from test_result;
數(shù)據(jù)如下:
到這一步,動態(tài)行轉列就已經(jīng)實現(xiàn)了!希望對小伙伴有幫助!