oracle 存储过程-动态行转列,解决。
包头
create or replace package pro_test as
TYPE out_cursor IS REF CURSOR;
procedure Alarm_ContentsByTime(
p_StartTime varchar2, ----开始时间
p_EndTime varchar2, ----结束时间
io_cursor in OUT out_cursor
); end pro_test;
包体
create or replace package body pro_test is procedure Alarm_ContentsByTime(
p_StartTime varchar2, ----开始时间
p_EndTime varchar2, ----结束时间
io_cursor in OUT out_cursor
) is
cursor cursor_1 IS
--获取 列用于循环。
select DISTINCT t.ps_productorcode code, t.PS_PRODUCTORNAME name,1 type FROM PSINFO_PRODUCTYIELD_SB t
union all
select DISTINCT f.ps_rawcode code,f.ps_rawname name,2 type from PSINFO_RAWMATERIALS_SB f
ORDER BY type,code;
V_SQL VARCHAR2(6000);
begin
V_SQL := 'select ''市本级'' as c0003_stname, 1 as c0003_stcode';
FOR V_XCLCK IN cursor_1
LOOP
V_SQL := V_SQL || ',' || 'min(case when t1.ps_name=''' || V_XCLCK.name ||
''' then t1.ps_name end) as ' || V_XCLCK.name||'mc'|| ',' || 'min(case when t1.ps_name=''' || V_XCLCK.name ||
''' then t1.cl end) as ' || V_XCLCK.name||'cl'|| ',' || 'min(case when t1.ps_name=''' || V_XCLCK.name ||
''' then t1.ps_unit end) as ' || V_XCLCK.name||'dw';
END LOOP;
V_SQL := V_SQL || ' from t0003_station t
inner join (
select
c.c0003_stcode,
c.c0003_stname,
a.ps_productorname ps_name,
a.ps_unit,
sum(nvl(a.ps_productoryield,0)) cl
from t0003_station c,PSINFO_PRODUCTYIELD_SB a
where a.c0003_stcode=c.c0003_stcode
and a.ps_month>=to_date('''||p_StartTime||''',''yyyy-mm-dd hh24:mi:ss'')
and a.ps_month<=to_date('''||p_EndTime||''',''yyyy-mm-dd hh24:mi:ss'')
group by c.c0003_stcode,c.c0003_stname,a.ps_productorname,a.ps_unit
union all
select
c.c0003_stcode,
c.c0003_stname,
b.ps_rawname ps_name,
b.ps_unit,
sum(nvl(b.ps_productoryield,0)) cl
from t0003_station c,PSINFO_RAWMATERIALS_SB b
where b.c0003_stcode=c.c0003_stcode
and b.ps_month>=to_date('''||p_StartTime||''',''yyyy-mm-dd hh24:mi:ss'')
and b.ps_month<=to_date('''||p_EndTime||''',''yyyy-mm-dd hh24:mi:ss'')
group by c.c0003_stcode,c.c0003_stname,b.ps_rawname,b.ps_unit
) t1 on t.c0003_stcode=t1.c0003_stcode
left join t0070_enterprise t70 on
t.c0003_stcode=t70.c0003_stcode
and t70.c0003_year=t1.c0003_stcode
and t70.c0070_stcode_ctrl=''320100''
group by t.c0003_stname,t.c0003_stcode ';
DBMS_OUTPUT.PUT_LINE(V_SQL);
--V_SQL := 'CREATE OR REPLACE VIEW RESULT AS '|| V_SQL;
open io_cursor for V_SQL;
end Alarm_ContentsByTime;
end pro_test;
执行之后

链接地址:http://www.cnblogs.com/blue123/p/8441112.html
oracle 存储过程-动态行转列,解决。的更多相关文章
- 中等难度SQL语句(存储过程,分页,拼接字段、游标,日期类型转换,动态行转列,视图)汇总
一.创建存储过程 if Exists(select name from sysobjects where NAME = 'sp1LoginUser' and type='P')drop procedu ...
- 【转】MySQL存储过程中使用动态行转列
MySQL存储过程中使用动态行转列 最近做项目关于数据报表处理,然而数据库存储格式和报表展现形式不同,需要进行一下行转列的操作,在做上一个项目的时候也看了一下,但是后来换了读取方式,也就没深入研究这个 ...
- MySQL存储过程的动态行转列
MySQL存储过程中使用动态行转列 最近做项目关于数据报表处理,然而数据库存储格式和报表展现形式不同,需要进行一下行转列的操作,在做上一个项目的时候也看了一下,但是后来换了读取方式,也就没深入研究这个 ...
- [MSSQL]採用pivot函数实现动态行转列
环境要求:2005+ 在日常需求中常常会有行转列的事情需求处理.假设不是动态的行,那么我们能够採取case when 罗列处理. 在sql 2005曾经处理动态行或列的时候,通常採用拼接字符串的方法处 ...
- MySQL 行转列 -》动态行转列 -》动态行转列带计算
Pivot Table Using MySQL - A Complete Guide | WebDevZoomhttp://webdevzoom.com/pivot-table-using-mysql ...
- 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)
原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...
- Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER
关于Oracle存储过程执行权限问题的解决 http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html (2014-04-02 04:06:28) 转载▼ ...
- mybatis 动态行转列
SELECT user_name , MAX(CASE course WHEN '数学' THEN score END ) 数学, MAX(CASE course WHEN '语文' THEN sco ...
- 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)
原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名)
原文:在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
随机推荐
- shell脚本定时任务转移项目日志
1.之前同时项目部署在根目录,根目录磁盘空间40G,运行一年后日志占了18G的磁盘空间, 根目录只有几个G的磁盘空间,现在写shell脚本定时转移日志文件到挂载的磁盘目录下 2.编写shell脚本 # ...
- aqueduct “Uncaught error Bad state: No element" 或者 "NoSuchMethodError: The getter 'location' was called on null.”
可以先将Pub\Cache目录下的内容清空(移除aqueduct命令),随后重新运行命令生成 pub global activate aqueduct 设置环境变量 创建用户变量 PUB_HOSTE ...
- Windows Terminal 中 WSL2 默认打开路径
打开Windows Terminal.鼠标点击进入设置,或者同时按ctrl和逗号.找到如下内容: { "guid": "{07b52e3e-de2c-5db4-bd2d- ...
- pytest(5)-自定义用例顺序(pytest-ordering)-后续学习
前言 测试用例在设计的时候,我们一般要求不要有先后顺序,用例是可以打乱了执行的,这样才能达到测试的效果. 有些同学在写用例的时候,用例写了先后顺序, 有先后顺序后,后面还会有新的问题(如:上个用例返回 ...
- VMware导入ovf报错
如下图所示报错 在网上查找了一些解决方案,大都说是ovftool版本兼容问题,但是我这里好像并不行,最后的解决的办法是对导入的位置默认不做改动. 报错原因:改变了默认路径.
- webssh
目录 使用 jupyter notebook 使用webssh GateOne 使用 jupyter notebook pip install jupyter ipyton # 启动 jupyter ...
- 第十三天笔记Cookie
第十三天笔记Cookie 计算机重要的四个内容 数据结构 数据存储的结构及逻辑的体现,以及相关数据结构之间的操作(算法) 操作系统 windows(dos命令).linux(指令操作) 计网 网络通信 ...
- 403 forbidden 与 413Too Large
http://www.ccschy.com/shuma/12846.html https://blog.51cto.com/u_15127556/4543159 查的有关资料如下,最后的原因是服务器网 ...
- K8S-PV和PVC
目录: emptyDir存储卷 hostPath存储卷 nfs共享存储卷 PVC和PV 生命周期 一个PV从创建到销毁的流程 静态 回收策略 NFS使用PV和PVC 动态 总结 容器磁盘上的文 ...
- SAP 附件功能 PRD环境无法删除 VIEW_ATTA
如图:界面上面没有打勾确认按钮 解决方案:来源网址 How to disable, delete and edit buttons function in attachment list. | SAP ...