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】DBeaver Enterprise Edition 5.1.1 Download
DBeaver Enterprise Edition 5.1.1 Download mkdir -p /opt/downloads/dbeaver/dbeaver-ee-5.1.1 mkdir -p ...
- Kubernetes--Pod存活性探测(设置HTTP探针)
基于HTTP的探测(HTTPGetAction)向目标容器发起一个HTTP请求,根据其响应码进行结果判定,响应码形如2xx或者3xx时表示检测通过."sepc.containers.live ...
- 雪花算法-Java分布式系统自增id
1.雪花算法的用途 分布式系统中ID生成方案,比较简单的是UUID(Universally Unique Identifier,通用唯一识别码),但是其存在两个明显的弊端: 一.UUID是128位的, ...
- 移动web_平面转换
平面转换 平面 平移 旋转 缩放 概念:使用transform属性实现元素的位移.旋转.缩放等效果 注意点:行内元素所有的平面转换是没有效果的 平面: 平面转换的平面指的是二维平面(2D)只有X和Y轴 ...
- IO学习笔记7
2.4 多路复用javaAPI 在上面我们简单java代码实现了多路复用,是一个单线程版的.讲上面的epoll代码复制到linux服务器中,使用strace追踪系统调用. javaAPI会根据系统类型 ...
- Java枚举类的学习
package java1; /** * @author 高槐玉 * #Description: * 枚举类的使用 * 1,枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类 * 2.当需要 ...
- linux环境通过nginx转发allure报告
前言: 自动化测试生成的allure报告一般通过jenkins生成,生成后通过jenkins的view账号进行查看,但这样就必须登录jenkins才能看到,如何不通过登录jenkins从而看到al ...
- GeoServer 发布PostGIS数据库中的栅格数据
1.导入栅格数据 进入PostgreSQL\bin目录,利用raster2pgsql工具导入栅格数据,具体命令如下所示: <!-- 分块,切片存储到PostGIS数据库中 --> rast ...
- 6.mysql优化案例
1.单表优化: 进行优化: 删除原来的三个字段的索引,创建二个字段的索引: 2.两表关联: 左连接,在右表创建索引 右连接,在左表创建索引: 3.三表关联:左关联全都在右表创建索引:
- xfce-debian10 英文环境安装配置记录
Centos还没有用利索(因为我听说debian是更纯正的社区开源项目???可是这对于我这样毫无技术菜鸟来说有什么关系呢???可是耐不住心中的悸动???悸动又从哪里了呢???哎,不管了),突然心血来潮 ...