Oracle 多行轉多列,列值轉為列名


前段時間做調查問卷,客戶創建自定義問卷內容,包括題目和選項內容;

之后需要導出問卷明細,,,,麻煩來咯

於是到網上到處搜索,沒有直接結果;於是又找各種相似的,,終於功夫不負有心人

然后最終自己寫出來了,decode才是核心

廢話不多說,看圖

需求示例圖表:

 

存儲過程,嘿嘿:

 1 create or replace procedure NAG_QUESTIONERSULT_EXP(
 2  V_QID in number,
 3  C_Title out sys_refcursor,
 4  C_Data out sys_refcursor
 5 )
 6 as
 7 /*
 8 導出調查問卷資答案數據
 9 Auth:lzpong 2015/09/01
10 */
11 cursor dusers is --列信息
12        select qss.qss_id,nvl(qss.qss_title,substr(qs.qs_title,0,20)) QSS_TITLE from nag_questions qs,nag_questionss qss
13          where qss.qss_qs_id=qs.qs_id and qs.qs_q_id=V_QID
14          order by qs.qs_order,qss.qss_order;
15 strSql varchar2(10000);
16 begin
17   for ur in dusers loop
18     strSql:=strSql||'wm_concat(decode(QR_QSS_ID,'''||ur.qss_id||''',QR_QSS_DES,null)) as "'||ur.qss_title||'",';
19   end loop;
20   open C_Data for 
21   'select QR_ID,QR_AGENTID,max(QR_CREATEDATE) QR_CREATEDATE,'||
22   substr(strSql,0,length(strSql)-1)
23 ||'from (
24 select QR_QS_ID,QR_QSS_ID QR_QSS_ID,''(√)''||QR_QSS_DES QR_QSS_DES,  QR_CREATEDATE,QR_U_ID,QR_AGENTID,QR_ID
25   from nag_questionresult,nag_questions where qr_qs_id=qs_id and qs_q_id='||V_QID||'
26   order by QR_ID
27 )
28 group by QR_ID,QR_AGENTID';
29   open C_Title for
30   select q.q_id,q.q_title,q.q_des,qs.qs_id,qs.qs_title ,(select count(qss_id) from nag_questionss qss where qss.qss_qs_id=qs.qs_id) qs_cols
31     from nag_question q,nag_questions qs where q.q_id=qs.qs_q_id and q.q_id=V_QID
32     order by q.q_id,qs.qs_order;
33 end;
存儲過程

 

 

實際數據:

 

結果:

 

轉載請注明來自:lzpong

URL:http://www.cnblogs.com/lzpong/p/4778022.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM