暂无图片
分享
LEE
2019-06-24
select 行列转换 引起 ora-03113

select 表关联查询能正常返回结果 

SELECT 科室 AS 名称,

               round(SUM(金额) / 10000, 2) AS 总收入,

               round(SUM(DECODE(TT.名称, '药品费', 金额, 0)) / 10000, 2) AS 药品收入,

               round(SUM(DECODE(TT.名称, '药品费', 0, 金额)) / 10000, 2) AS 非药收入

          FROM (SELECT DA.系统序号, NVL(KS.名称, '未知') AS 科室

                  FROM INQ_D住院档案 DA

                  LEFT JOIN DOC_T科室档案 KS

                    ON KS.系统序号 = DA.当前科室I

                UNION ALL

                SELECT DA.系统序号, NVL(KS.名称, '未知') AS 科室

                  FROM INQ_D住院档案Z DA

                  LEFT JOIN DOC_T科室档案 KS

                    ON KS.系统序号 = DA.当前科室I) T

         INNER JOIN (SELECT JSLB.住院序号I,

                           FB.名称,

                           SUM(FYMX.执行金额 * SIGN(JSLB.结算总额)) AS 金额

                      FROM inq_d住院费用明细 FYMX

                     INNER JOIN inq_d住院结算明细 JSMX

                        ON FYMX.系统序号 = JSMX.明细序号I

                     INNER JOIN inq_d住院结算列表 JSLB

                        ON JSMX.结算序号I = decode(JSLB.冲销状态N,

                                               2,

                                               JSLB.冲销序号I,

                                               JSLB.系统序号)

                     INNER JOIN doc_t收费项目价格表 JG

                        ON JG.系统序号 = FYMX.收费项目序号I

                     INNER JOIN doc_t收费项目 XM

                        ON JG.项目序号I = XM.系统序号

                     INNER JOIN DOC_VT费用类别_院长查询 FB

                        ON XM.费用类别I = FB.系统序号

                     GROUP BY FB.名称, JSLB.住院序号I

                    UNION ALL

                    SELECT JSLB.住院序号I,

                           FB.名称,

                           SUM(FYMX.执行金额 * SIGN(JSLB.结算总额)) AS 金额

                      FROM inq_d住院费用明细Z FYMX

                     INNER JOIN inq_d住院结算明细 JSMX

                        ON FYMX.系统序号 = JSMX.明细序号I

                     INNER JOIN inq_d住院结算列表 JSLB

                        ON JSMX.结算序号I = decode(JSLB.冲销状态N,

                                               2,

                                               JSLB.冲销序号I,

                                               JSLB.系统序号)

                     INNER JOIN doc_t收费项目价格表 JG

                        ON JG.系统序号 = FYMX.收费项目序号I

                     INNER JOIN doc_t收费项目 XM

                        ON JG.项目序号I = XM.系统序号

                     INNER JOIN DOC_VT费用类别_院长查询 FB

                        ON XM.费用类别I = FB.系统序号

                      GROUP BY FB.名称, JSLB.住院序号I) TT

            ON T.系统序号 = TT.住院序号I

         GROUP BY ROLLUP(科室)


加上行列转换 后

SELECT 汇总, 名称, 值

  FROM (

             

         ORDER BY 总收入 DESC) UNPIVOT(值 FOR 汇总 IN(select SUM(FYMX.执行金额 * SIGN(JSLB.结算总额)) , 药品收入, 非药收入) )

报ora-03113  怀疑oracle内部错误导致 ,请问这种问题是什么原因导致的,如何避免呢



收藏
分享
7条回答
默认
最新
LEE

1.png

暂无图片 评论
暂无图片 有用 0
打赏 0
LEE

2.png

暂无图片 评论
暂无图片 有用 0
打赏 0
LEE

3.png

暂无图片 评论
暂无图片 有用 0
打赏 0
LEE
上传附件:orcl_ora_6028_i80669.trc
暂无图片 评论
暂无图片 有用 0
打赏 0
燕鑫

UNPIVOT(值 FOR 汇总 IN(总收入 , 药品收入, 非药收入) )

in后面的括号里跟的是列名

暂无图片 评论
暂无图片 有用 0
打赏 0
LEE

修改sql写法后 执行成功,谢谢燕鑫

暂无图片 评论
暂无图片 有用 0
打赏 0
文成
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
stuff completely: ORA-01652: 无法通过 128 (在表空间 TEMP 中) 扩展 temp,怎么处理?
回答 1
给临时表空间增加数据文件
Oracle:impdp时掉主键导致导入数据有重复记录?
回答 2
原表可能有重复记录,然后排除比较困难。用了延迟校验,只对后续数据加约束,之前的数据不验证。这种在11g的时候就有。导出可能会被误以为主键失效,其实不是的。
oracle 11g where条件 还是自右向左执行吗?
回答 1
这是RBO的规则,从10g开始默认就是CBO了,where后面的顺序没有关系。《在Oracle中,什么是RBO和CBO?》
Oracle 11GR2 32bit客户端静默安装报错
回答 1
盲猜,设个ORACLEHOSTNAME机器名的环境变量
plsql 直接链接服务器上的oracle 数据库,dmp 文件如何还原?
回答 2
已采纳
在PL/SQLDeveloper的菜单Tools(工具)>导入表 
Oracle安装补丁,新版本的opatch没法生成ocm响应文件?
回答 1
已采纳
按照README操作就可以了,安装补丁的方式不是固有的,还是参照标准步骤最靠谱呀!
Oracle 11g的rman 可以单表恢复吗?
回答 1
物理备份不行。你先恢复好这个,再从里面拿吧。
编辑器打开trc文件会造成(Windows+11gR2 11.2.0.1)
回答 3
把trc文件复制一份,用emeditor文本编辑器打开复制的trc文件
CTAS有什么办法加快效率吗
回答 5
已采纳
不要使用并行,并行对这种LOB数据不起作用的,建议把文本数据和LOB数据分开操作,文本数据比较小,可以通过CTAS方式一次迁走,LOB数据建议多分几个批次。
AWR分析报告问题求助:应用表示最近查询修改慢,分析报告除过2条业务相关sql存在性能问题,感觉其他没什么啥大问题
回答 4
大师相关报告已添加附件