前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容;

之后需要导出问卷明细,,,,麻烦来咯

于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人

然后最终自己写出来了,decode才是核心

废话不多说,看图

需求示例图表:

c32a741eb3c56c8f2baed2f3f20fdb61.png

存储过程,嘿嘿:

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;

存储过程

实际数据:

85e071e81fe66ab8f79b068478b5498c.png 

a6fc8305bf0d91ea9c1c8a5b235314fc.png

结果:

bad6ab9a18f34d42d3110bb463127bf0.png

转载请注明来自:lzpong

Oracle 多行转多列

Oracle 多行转多列,列值转为列名   前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要到处问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的 ...

Oracle字符串行拆分成列的三种方式

Oracle字符串行拆分成列的三种方式 --muphy 开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行. 如下 ...

Oracle行转列/列转行

1.oracle的pivot函数 原表 使用pivot函数: with temp as(select '四川省' nation ,'成都市' city,'第一' ranking from dual u ...

oracle 行转列~列转行(几种方法)

工作中,我们经常会碰到行转列的情况 这里我介绍几种简单的方法--行转列 1.oracle的pivot函数 原表 使用pivot函数: with temp as(select '四川省' nation ...

poi获取合并单元格内的第一行第一列的值

当读取如图所示的excel时,显示为第1行 第1列 的内容是:合并单元格 其它在合并单元格区域内的单元格不显示 示例代码如下: import java.io.FileInputStream; impo ...

Oracle中“行转列”的实现方式

在报表的开发当中,难免会遇到行转列的问题. 以Oracle中scott的emp为例,统计各职位的人员在各部门的人数分布情况,就可以用“行转列”: scott的emp的原始数据为: EMPNO ENAM ...

awk替换第几行第几列的值

代码如下: awk '{if(2==NR){gsub(/.*/, 300, $5)}print}' list.txt 将文件list.txt的第2行第5列的值替换为300

学习笔记13—python DataFrame获取行数、列数、索引及第几行第几列的值

1. df=DataFrame([{‘A’:’11’,’B’:’12’},{‘A’:’111’,’B’:’121’},{‘A’:’1111’,’B’:’1211’}]) print df.column ...

python DataFrame获取行数、列数、索引及第几行第几列的值

print df.columns.size#列数 2 print df.iloc[:,0].size#行数 3 print df.ix[[0]].index.values[0]#索引值 0 print ...

随机推荐

ASP.NET MVC 5 使用autofac实现DI

使用Nuget添加Autofac.MVC的引用 启动项设置 注册Controller 注册ModelBinder 注册相关的web abstraction 为View层启用属性注入 为Action F ...

应用SQLServer For XML 生成XML避免在C# 拼字符串

最近在Review代码时,有一个功能是 查询数据库中一列,然后生成像      a      

关于Parallel.For/Foreach并行方法中的localInit, body, localFinally使用

对集合成员的操作往往可以通过并行来提高效率,.NET Parallel类提供了简单的方法来帮助我们实现这种并行,比如Paralle.For/ForEach/Invoke方法. 其中,For/ForEa ...

ajax传递的数据类型json传递

$(".del_goods").click(function(){ //删除选中的商品 var clear_data = [];//数组 $("input[name='c ...

[物理学与PDEs]第3章习题7 快、慢及Alfv\'en 特征速度的比较

证明: 当 $H_1\neq 0$ 及 $H_2^2+H_3^2\neq 0$ 时, 快.慢及 Alfv\'en 特征速度 $C_f$, $C_s$ 及 $C_a$ 满足 $$\bex 0

关于unity3dGUI(uGUI)的一些自适应的收获,在这里跟大家分享一下

假设大家要转载这篇文章,请注明出处.本人名字叫赖张殷,博客地址为http://my.csdn.net/?c=674f97f953e5dbfdba9fefaa3d1fcbe1 //2017年5月12日改 ...

kubernetes 简介:kube-dns 和服务发现

服务发现 kubernetes 提供了 service 的概念可以通过 VIP 访问 pod 提供的服务,但是在使用的时候还有一个问题:怎么知道某个应用的 VIP?比如我们有两个应用,一个 app,一 ...

Android开源框架源码分析:Okhttp

一 请求与响应流程 1.1 请求的封装 1.2 请求的发送 1.3 请求的调度 二 拦截器 2.1 RetryAndFollowUpInterceptor 2.2 BridgeInterceptor ...

mybatis Mapper XML 映射文件

传送门:mybatis官方文档 Mapper XML 文件详解 一. 数据查询语句 1. select

java流输入输出

java读取txt文件内容.可以作如下理解:  首先获得一个文件句柄.File file = new File(); file即为文件句柄.两人之间连通电话网络了.接下来可以开始打电话了.  通过这条 ...

更多推荐