暂无图片
分享
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
LEE

2.png

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

3.png

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

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

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

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

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

暂无图片 评论
暂无图片 有用 0
文成
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
附件列表
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏