Oracle 多行转多列,列值转为列名
2015-09-02 11:14
471 查看
前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容;
之后需要到处问卷明细,,,,麻烦来咯
于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人
然后最终自己写出来了,decode才是核心
废话不多说,看图
需求示例图表:
存储过程
实际数据:
结果:
之后需要到处问卷明细,,,,麻烦来咯
于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人
然后最终自己写出来了,decode才是核心
废话不多说,看图
需求示例图表:
create or replace procedure NAG_QUESTIONERSULT_EXP( V_QID in number, C_Title out sys_refcursor, C_Data out sys_refcursor ) as /* 导出调查问卷资答案数据 Auth:lzpong 2015/09/01 */ cursor dusers is --列信息 select qss.qss_id,nvl(qss.qss_title,substr(qs.qs_title,0,20)) QSS_TITLE from nag_questions qs,nag_questionss qss where qss.qss_qs_id=qs.qs_id and qs.qs_q_id=V_QID order by qs.qs_order,qss.qss_order; strSql varchar2(10000); begin for ur in dusers loop strSql:=strSql||'wm_concat(decode(QR_QSS_ID,'''||ur.qss_id||''',QR_QSS_DES,null)) as "'||ur.qss_title||'",'; end loop; open C_Data for 'select QR_ID,QR_AGENTID,max(QR_CREATEDATE) QR_CREATEDATE,'|| substr(strSql,0,length(strSql)-1) ||'from ( 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 from nag_questionresult,nag_questions where qr_qs_id=qs_id and qs_q_id='||V_QID||' order by QR_ID ) group by QR_ID,QR_AGENTID'; open C_Title for 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 from nag_question q,nag_questions qs where q.q_id=qs.qs_q_id and q.q_id=V_QID order by q.q_id,qs.qs_order; end;
存储过程
实际数据:
结果:
相关文章推荐
- oracle与mysql 数据库sql 分页查询
- oracle与sqlserver处理判断字段是否为空
- Oracle timestamp
- 如何实现只授予用户查看存储过程定义的权限
- Oracle分页函数(存储过程)
- PL/SQL与SQL(Oracle)Case语句
- Oracle数据库远程连接的方法
- Oracle 11g sys,system,scott密码重新设置方法
- 对比Oracle临时表和SQL Server临时表的不同点
- 详解Oracle数据库各类控制语句的使用
- oracle数据库导入导出imp/exp
- Win8 安装64位Oracle11g R2
- oracle闪回(flashback)
- Oracle学习笔记20150901脏读不可重复读以及幻读概念理解
- Oracle 递归查询
- Oracle数据库修改字段长度
- 浅谈Oracle12c 数据库、用户、CDB与PDB之间的关系
- oracle查看表占用磁盘空间
- 关于Oracle GoldenGate 参数TRANLOGOPTIONS altarchivelogdest
- oracle快速复制表数据