一次500行的SQL优化

客户反馈报表查询比较慢 平均要跑164s ~170s sql部分如下

SQL> explain plan for Select * From (select  '期初'  业务大类,
  2      '-------' 业务分类,
  3        sum(西药成本)  西药成本,
  4        sum(西药零售)  西药零售,
  5        sum(中成药成本)  中成药成本,
  6        sum(中成药零售)  中成药零售,
  7        sum(中药成本合计)  中药成本,
  8        sum(中药零售合计)  中药零售,
  9         sum(中药成本合计+西药成本合计) 成本合计,
 10        sum(中药零售合计+西药零售合计) 零售合计
 11        from  (select                      --西药房期初
 12   sum(case when 药品类型i=1  then  A.变化后库存数量*A.成本单价 else 0 end ) 西药成本
 13      ,SUM( case when 药品类型i=1  then  A.变化后库存数量*A.零售单价  else 0 end ) 西药零售,
 14      sum(case when (药品类型i=2 or   药品类型i=4) then  A.变化后库存数量*A.成本单价 else 0 end ) 中成药成本,
 15      SUM( case when (药品类型i=2 or   药品类型i=4)  then  A.变化后库存数量*A.零售单价  else 0 end ) 中成药零售,
 16      sum(A.变化后库存数量*A.成本单价) As 西药成本合计,
 17      sum(A.变化后库存数量*A.零售单价) As 西药零售合计,
 18      0 中药成本合计,
 19        0 中药零售合计
 20          from dug_d西药房库存变化明细 A
 21  inner join (select  批次序号i,药房序号I,药品序号I,max(系统序号) As 系统序号 from dug_d西药房库存变化明细 where 操作时间<to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss')
 22  and 隶属机构I='1' and     (药房序号I='14' or '14'='0')
 23         group by  药房序号I,药品序号I,批次序号i) B on A.系统序号=B.系统序号
 24      inner join doc_t药品目录_价格 bb on bb.系统序号 = b.药品序号i
 25     inner join doc_t药品目录 cc on cc.系统序号 = bb.药品目录序号i
 26      inner join doc_t药典目录 dd on dd.系统序号 = cc.药典序号i
 27    where 药品类型i !=5
 28  union all
 29  select
 30      0 西药成本
 31      ,0  西药零售,
 32      0 中成药成本
 33      ,0  中成药零售
 34      ,0  西药成本合计
 35      ,0 西药零售合计,
 36      sum(A.变化后库存数量*A.成本单价) As 中药成本合计,
 37      sum(A.变化后库存数量*A.零售单价) As 中药零售合计
 38   from dug_d中药房库存变化明细 A
 39  inner join (select  批次序号i,药房序号I,药品序号I,max(系统序号) As 系统序号 from dug_d中药房库存变化明细 where 操作时间<to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss')
 40  and 隶属机构I='1'  and   (药房序号I='14' or '14'='0')
 41         group by  药房序号I,药品序号I,批次序号i) B on A.系统序号=B.系统序号
 42   )  union  all
 43  select  '入库'  业务大类,
 44      '药房领用' 业务分类,
 45        sum(西药成本)  西药成本,
 46        sum(西药零售)  西药零售,
 47        sum(中成药成本)  中成药成本,
 48        sum(中成药零售)  中成药零售,
 49        sum(中药成本合计)  中药成本,
 50        sum(中药零售合计)  中药零售,
 51         sum(中药成本合计+西药成本合计) 成本合计,
 52        sum(中药零售合计+西药零售合计) 零售合计
 53        from  (
 54  select
 55   sum(case when  业务来源 in ('药房申领','药房申领冲销')   and  药品类型i=1 then  b.成本单价*b.变化数量  else 0 end   ) As 西药成本,
 56   sum( case when 业务来源 in ('药房申领','药房申领冲销') and  药品类型i=1 then  b.零售单价*b.变化数量  else 0 end ) 西药零售,
 57   sum(case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('药房申领','药房申领冲销')    then  b.成本单价*b.变化数量  else 0 end   ) As 中成药成本,
 58   sum( case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('药房申领','药房申领冲销')   then  b.零售单价*b.变化数量  else 0 end  ) 中成药零售,
 59    sum(case when  业务来源 in ('药房申领','药房申领冲销')   then  b.成本单价*b.变化数量  else 0 end   )  As 西药成本合计,
 60      sum( case when 业务来源 in ('药房申领','药房申领冲销')   then  b.零售单价*b.变化数量  else 0 end ) As 西药零售合计,
 61     0  中药成本合计,
 62     0  中药零售合计
 63    from dug_d西药房库存变化明细 b
 64                    inner join doc_t药品目录_价格 bb on bb.系统序号 = b.药品序号i
 65     inner join doc_t药品目录 cc on cc.系统序号 = bb.药品目录序号i
 66      inner join doc_t药典目录 dd on dd.系统序号 = cc.药典序号i
 67                   where       b.隶属机构I='1'  and     药品类型i !=5 and    (药房序号I='14' or '14'='0')
 68                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
 69      group by  药房序号I,药品序号I,批次序号i
 70  union all
 71  select
 72   0 西药成本
 73      ,0  西药零售,
 74      0 中成药成本
 75      ,0  中成药零售
 76      ,0  西药成本合计
 77      ,0 西药零售合计,
 78     sum(case when  业务来源 in ('药房申领','药房申领冲销')    then  b.成本单价*b.变化数量  else 0 end   )  中药成本合计,
 79      sum( case when 业务来源 in ('药房申领','药房申领冲销')   then  b.零售单价*b.变化数量  else 0 end )  中药零售合计
 80    from dug_d中药房库存变化明细 b
 81                   where       b.隶属机构I='1'   and    (药房序号I='14' or '14'='0')
 82                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
 83      group by  药房序号I,药品序号I,批次序号i
 84  )  union all
 85  select
 86  '入库'  业务大类,
 87     '科室退货'  业务分类,
 88   sum(西药成本) 西药成本,
 89     sum(西药零售) 西药零售,
 90     sum(中成药成本) 中成药成本,
 91     sum(中成药零售)  中成药零售,
 92     sum(中药成本合计)  中药成本合计,
 93     sum(中药零售合计)  中药零售合计,
 94     sum(中药成本合计+西药成本合计)  成本合计,
 95     sum(中药零售合计+西药零售合计) 零售合计
 96  from (select
 97   sum(case when  业务来源 in ('科室退货','科室退货冲销')  and  药品类型i=1 then  b.成本单价*b.变化数量  else 0 end   ) As 西药成本,
 98   sum( case when 业务来源 in ('科室退货','科室退货冲销') and  药品类型i=1 then  b.零售单价*b.变化数量  else 0 end ) 西药零售,
 99   sum(case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('科室退货','科室退货冲销')  then  b.成本单价*b.变化数量  else 0 end   ) As 中成药成本,
100   sum( case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('科室退货','科室退货冲销')  then  b.零售单价*b.变化数量  else 0 end  ) 中成药零售,
101    sum(case when  业务来源 in ('科室退货','科室退货冲销')  then  b.成本单价*b.变化数量  else 0 end   )  As 西药成本合计,
102      sum( case when 业务来源 in ('科室退货','科室退货冲销')   then  b.零售单价*b.变化数量  else 0 end ) As 西药零售合计,
103     0  中药成本合计,
104     0  中药零售合计
105    from dug_d西药房库存变化明细 b
106                    inner join doc_t药品目录_价格 bb on bb.系统序号 = b.药品序号i
107     inner join doc_t药品目录 cc on cc.系统序号 = bb.药品目录序号i
108      inner join doc_t药典目录 dd on dd.系统序号 = cc.药典序号i
109                   where       b.隶属机构I='1'  and     药品类型i !=5  and    (药房序号I='14' or '14'='0')
110                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
111      group by  药房序号I,药品序号I,批次序号i
112  union all
113  select
114     0 As 西药成本,
115       0 As 西药零售,
116      0 As 中成药成本,
117        0 As 中成药零售,
118        0 As 西药成本合计,
119       0 As 西药零售合计,
120    sum(case when  业务来源 in ('科室退货','科室退货冲销')  then  b.成本单价*b.变化数量  else 0 end   )  As  中药成本合计,
121    sum( case when 业务来源 in  ('科室退货','科室退货冲销')  then  b.零售单价*b.变化数量  else 0 end ) As 中药零售合计
122     from dug_d中药房库存变化明细 b
123                   where       b.隶属机构I='1'    and    (药房序号I='14' or '14'='0')
124                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
125      group by  药房序号I,药品序号I,批次序号i
126  )union  all
127  select  '入库'  业务大类,
128      '其他入库' 业务分类,
129        sum(西药成本)  西药成本,
130        sum(西药零售)  西药零售,
131        sum(中成药成本)  中成药成本,
132        sum(中成药零售)  中成药零售,
133        sum(中药成本合计)  中药成本,
134        sum(中药零售合计)  中药零售,
135         sum(中药成本合计+西药成本合计) 成本合计,
136        sum(中药零售合计+西药零售合计) 零售合计
137        from  (
138  select
139   sum(case when  业务来源 in ('药房入库','药房入库冲销')  and  药品类型i=1 then  b.成本单价*b.变化数量  else 0 end   ) As 西药成本,
140   sum( case when 业务来源 in ('药房入库','药房入库冲销') and  药品类型i=1 then  b.零售单价*b.变化数量  else 0 end ) 西药零售,
141   sum(case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('药房入库','药房入库冲销')   then  b.成本单价*b.变化数量  else 0 end   ) As 中成药成本,
142   sum( case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('药房入库','药房入库冲销')   then  b.零售单价*b.变化数量  else 0 end  ) 中成药零售,
143    sum(case when  业务来源 in ('药房入库','药房入库冲销')   then  b.成本单价*b.变化数量  else 0 end   )  As 西药成本合计,
144      sum( case when 业务来源 in ('药房入库','药房入库冲销')  then  b.零售单价*b.变化数量  else 0 end ) As 西药零售合计,
145     0  中药成本合计,
146     0  中药零售合计
147    from dug_d西药房库存变化明细 b
148                    inner join doc_t药品目录_价格 bb on bb.系统序号 = b.药品序号i
149     inner join doc_t药品目录 cc on cc.系统序号 = bb.药品目录序号i
150      inner join doc_t药典目录 dd on dd.系统序号 = cc.药典序号i
151                   where       b.隶属机构I='1'  and     药品类型i !=5  and    (药房序号I='14' or '14'='0')
152                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
153      group by  药房序号I,药品序号I,批次序号i
154  union all
155  select
156   0 西药成本
157      ,0  西药零售,
158      0 中成药成本
159      ,0  中成药零售
160      ,0  西药成本合计
161      ,0 西药零售合计,
162     sum(case when  业务来源 in ('药房入库','药房入库冲销')   then  b.成本单价*b.变化数量  else 0 end   )  中药成本合计,
163      sum( case when 业务来源 in ('药房入库','药房入库冲销')  then  b.零售单价*b.变化数量  else 0 end )  中药零售合计
164    from dug_d中药房库存变化明细 b
165                   where       b.隶属机构I='1'     and    (药房序号I='14' or '14'='0')
166                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
167      group by  药房序号I,药品序号I,批次序号i
168  )  union all
169  select
170  '入库'  业务大类,
171        '药品调价' 业务分类,
172    sum(西药成本)  西药成本,
173        sum(西药零售)  西药零售,
174        sum(中成药成本)  中成药成本,
175        sum(中成药零售)  中成药零售,
176        sum(中药成本合计)  中药成本,
177        sum(中药零售合计)  中药零售,
178         sum(中药成本合计+西药成本合计) 成本合计,
179        sum(中药零售合计+西药零售合计) 零售合计
180        from  (  select
181   sum(case when  业务来源 in ('调价前','调价后')  and  药品类型i=1 then case when  业务来源='调价前' then -成本单价 else 成本单价 end *调价数量 else 0 end) As 西药成本,
182   sum( case when 业务来源 in ('调价前','调价后') and  药品类型i=1 then case when  业务来源='调价前' then -零售单价 else 零售单价 end *调价数量 else 0 end) 西药零售,
183   sum(case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('调价前','调价后')  then case when  业务来源='调价前'  then -成本单价 else 成本单价 end *调价数量 else 0 end) As 中成药成本,
184   sum( case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('调价前','调价后')  then case when  业务来源='调价前' then -零售单价 else 零售单价 end *调价数量 else 0 end) 中成药零售,
185    sum(case when  业务来源 in ('调价前','调价后') then case when  业务来源='调价前' then -成本单价 else 成本单价 end *调价数量 else 0 end )  As 西药成本合计,
186      sum( case when 业务来源 in ('调价前','调价后') then case when  业务来源='调价前' then -零售单价 else 零售单价 end *调价数量 else 0 end ) As 西药零售合计,
187     0  中药成本合计,
188     0  中药零售合计
189    from dug_d西药房库存变化明细 b
190                    inner join doc_t药品目录_价格 bb on bb.系统序号 = b.药品序号i
191     inner join doc_t药品目录 cc on cc.系统序号 = bb.药品目录序号i
192      inner join doc_t药典目录 dd on dd.系统序号 = cc.药典序号i
193                   where       b.隶属机构I='1'  and     药品类型i !=5  and    (药房序号I='14' or '14'='0')
194                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
195      group by  药房序号I,药品序号I,批次序号i
196  union all
197      select
198    0 西药成本
199      ,0  西药零售,
200      0 中成药成本
201      ,0  中成药零售
202      ,0  西药成本合计
203      ,0 西药零售合计,
204     sum( case when 业务来源 in ('调价前','调价后') then case when  业务来源='调价前' then -成本单价 else 成本单价 end *调价数量 else 0 end )  中药成本合计,
205     sum( case when 业务来源 in ('调价前','调价后') then case when  业务来源='调价前' then -零售单价 else 零售单价 end *调价数量 else 0 end )  中药零售合计
206    from dug_d中药房库存变化明细 b
207                   where       b.隶属机构I='1'   and    (药房序号I='14' or '14'='0')
208                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
209      group by  药房序号I,药品序号I,批次序号i
210  )union  all
211  select
212  '入库'  业务大类,
213         '药房盘盈' 业务分类,
214     sum(西药成本)  西药成本,
215        sum(西药零售)  西药零售,
216        sum(中成药成本)  中成药成本,
217        sum(中成药零售)  中成药零售,
218        sum(中药成本合计)  中药成本,
219        sum(中药零售合计)  中药零售,
220         sum(中药成本合计+西药成本合计) 成本合计,
221        sum(中药零售合计+西药零售合计) 零售合计
222  from (
223   select
224   sum(case when  业务来源='药房盘点'and  药品类型i=1 and 变化数量>0  then  b.成本单价*b.变化数量  else 0 end   ) +sum(case when  业务来源='药房盘点反结转'and  药品类型i=1 and 变化数量<0   then  b.成本单价*b.变化数量  else 0 end   )   As 西药成本,
225   sum( case when 业务来源='药房盘点'and  药品类型i=1 and 变化数量>0  then  b.零售单价*b.变化数量 else 0 end )   +sum(case when  业务来源='药房盘点反结转'and  药品类型i=1 and 变化数量<0   then  b.零售单价*b.变化数量  else 0 end   )    西药零售,
226   sum(case when (药品类型i=2 or   药品类型i=4) and  业务来源='药房盘点' and 变化数量>0  then  b.成本单价*b.变化数量  else 0 end   ) +
227   sum(case when (药品类型i=2 or   药品类型i=4) and  业务来源='药房盘点反结转' and 变化数量<0   then  b.成本单价*b.变化数量  else 0 end   )  As 中成药成本,
228   sum( case when (药品类型i=2 or   药品类型i=4) and  业务来源='药房盘点' and 变化数量>0   then  b.零售单价*b.变化数量  else 0 end  )
229  + sum( case when (药品类型i=2 or   药品类型i=4) and  业务来源='药房盘点反结转' and 变化数量<0   then  b.零售单价*b.变化数量  else 0 end  )
230  中成药零售,
231    sum(case when  业务来源='药房盘点' and 变化数量>0   then  b.成本单价*b.变化数量   else 0 end   )
232  +  sum(case when  业务来源='药房盘点反结转' and 变化数量<0   then  b.成本单价*b.变化数量   else 0 end   )
233   As 西药成本合计,
234      sum( case when 业务来源='药房盘点' and 变化数量>0   then  b.零售单价*b.变化数量  else 0 end )
235  + sum( case when 业务来源='药房盘点反结转' and 变化数量<0   then  b.零售单价*b.变化数量  else 0 end )
236   As 西药零售合计,
237     0  中药成本合计,
238     0  中药零售合计
239    from dug_d西药房库存变化明细 b
240                    inner join doc_t药品目录_价格 bb on bb.系统序号 = b.药品序号i
241     inner join doc_t药品目录 cc on cc.系统序号 = bb.药品目录序号i
242      inner join doc_t药典目录 dd on dd.系统序号 = cc.药典序号i
243                   where       b.隶属机构I='1'  and     药品类型i !=5  and    (药房序号I='14' or '14'='0')
244                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
245      group by  药房序号I,药品序号I,批次序号i
246  union all
247  select
248        0 As 西药成本,
249       0 As 西药零售,
250      0 As 中成药成本,
251        0 As 中成药零售,
252        0 As 西药成本合计,
253       0 As 西药零售合计,
254           sum(case when  业务来源='药房盘点' and 变化数量>0   then  b.成本单价*b.变化数量  else 0 end   )
255  + sum(case when  业务来源='药房盘点反结转' and 变化数量<0   then  b.成本单价*b.变化数量  else 0 end   )
256   As 中药成本合计,
257         sum( case when 业务来源='药房盘点' and 变化数量>0   then  b.零售单价*b.变化数量  else 0 end )
258  +sum( case when 业务来源='药房盘点反结转'  and 变化数量<0    then  b.零售单价*b.变化数量  else 0 end )
259   As 中药零售合计
260    from dug_d中药房库存变化明细 b
261                   where       b.隶属机构I='1'    and    (药房序号I='14' or '14'='0')
262                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
263      group by  药房序号I,药品序号I,批次序号i )
264  union  all
265  select  '出库'  业务大类,
266      '其他出库' 业务分类,
267        sum(西药成本)  西药成本,
268        sum(西药零售)  西药零售,
269        sum(中成药成本)  中成药成本,
270        sum(中成药零售)  中成药零售,
271        sum(中药成本合计)  中药成本,
272        sum(中药零售合计)  中药零售,
273         sum(中药成本合计+西药成本合计) 成本合计,
274        sum(中药零售合计+西药零售合计) 零售合计
275        from  (
276  select
277   sum(case when  业务来源 in  ('药房出库','药房出库冲销')  and  药品类型i=1 then  b.成本单价*b.变化数量  else 0 end   ) As 西药成本,
278   sum( case when 业务来源 in  ('药房出库','药房出库冲销') and  药品类型i=1 then  b.零售单价*b.变化数量  else 0 end ) 西药零售,
279   sum(case when (药品类型i=2 or   药品类型i=4) and  业务来源 in  ('药房出库','药房出库冲销')   then  b.成本单价*b.变化数量  else 0 end   ) As 中成药成本,
280   sum( case when (药品类型i=2 or   药品类型i=4) and  业务来源 in  ('药房出库','药房出库冲销')  then  b.零售单价*b.变化数量  else 0 end  ) 中成药零售,
281    sum(case when  业务来源 in  ('药房出库','药房出库冲销')  then  b.成本单价*b.变化数量  else 0 end   )  As 西药成本合计,
282      sum( case when 业务来源 in  ('药房出库','药房出库冲销') then  b.零售单价*b.变化数量  else 0 end ) As 西药零售合计,
283     0  中药成本合计,
284     0  中药零售合计
285    from dug_d西药房库存变化明细 b
286                    inner join doc_t药品目录_价格 bb on bb.系统序号 = b.药品序号i
287     inner join doc_t药品目录 cc on cc.系统序号 = bb.药品目录序号i
288      inner join doc_t药典目录 dd on dd.系统序号 = cc.药典序号i
289                   where       b.隶属机构I='1'  and     药品类型i !=5   and    (药房序号I='14' or '14'='0')
290                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
291      group by  药房序号I,药品序号I,批次序号i
292  union all
293  select
294   0 西药成本
295      ,0  西药零售,
296      0 中成药成本
297      ,0  中成药零售
298      ,0  西药成本合计
299      ,0 西药零售合计,
300     sum(case when  业务来源 in  ('药房出库','药房出库冲销')  then  b.成本单价*b.变化数量  else 0 end   )  中药成本合计,
301      sum( case when 业务来源 in  ('药房出库','药房出库冲销')  then  b.零售单价*b.变化数量  else 0 end )  中药零售合计
302    from dug_d中药房库存变化明细 b
303                   where       b.隶属机构I='1'   and    (药房序号I='14' or '14'='0')
304                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
305      group by  药房序号I,药品序号I,批次序号i
306  )
307  union  all
308  select
309     '出库'  业务大类,
310     '门诊药品销售' 业务分类,
311     sum(西药成本金额) 西药成本,
312     sum(西药零售金额) 西药零售,
313     sum(中成药成本) 中成药成本,
314     sum(中成药零售)  中成药零售,
315     sum(中药成本合计)  中药成本合计,
316     sum(中药零售合计)  中药零售合计,
317     sum(中药成本合计+西药成本合计)  成本合计,
318     sum(中药零售合计+西药零售合计) 零售合计
319     from (
320  select
321   sum(case when  (b.业务来源='门诊') and  药品类型i=1 then  b.成本单价*b.变化数量  else 0 end   ) As 西药成本金额,
322   sum( case when ( b.业务来源='门诊') and  药品类型i=1 then  b.零售单价*b.变化数量  else 0 end ) 西药零售金额,
323   sum(case when (药品类型i=2 or   药品类型i=4) and  ( b.业务来源='门诊')  then  b.成本单价*b.变化数量  else 0 end   ) As 中成药成本,
324   sum( case when (药品类型i=2 or   药品类型i=4) and  (b.业务来源='门诊')  then  b.零售单价*b.变化数量  else 0 end  ) 中成药零售,
325    sum(case when  (b.业务来源='门诊')   then  b.成本单价*b.变化数量  else 0 end   )  As 西药成本合计,
326      sum( case when (b.业务来源='门诊')  then  b.零售单价*b.变化数量  else 0 end ) As 西药零售合计,
327     0  中药成本合计,
328     0  中药零售合计
329    from dug_d西药房库存变化明细 b
330                    inner join doc_t药品目录_价格 bb on bb.系统序号 = b.药品序号i
331     inner join doc_t药品目录 cc on cc.系统序号 = bb.药品目录序号i
332      inner join doc_t药典目录 dd on dd.系统序号 = cc.药典序号i
333                   where       b.隶属机构I='1'  and     药品类型i !=5   and    (药房序号I='14' or '14'='0')
334                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
335      group by  药房序号I,药品序号I,批次序号i
336  union all
337  select
338   0 As 西药成本,
339       0 As 西药零售,
340      0 As 中成药成本,
341        0 As 中成药零售,
342        0 As 西药成本合计,
343       0 As 西药零售合计,
344       sum(case when  (b.业务来源='门诊')   then  b.成本单价*b.变化数量  else 0 end   )   中药成本合计,
345     sum( case when (b.业务来源='门诊')  then  b.零售单价*b.变化数量  else 0 end ) 中药零售合计
346    from dug_d中药房库存变化明细 b
347                   where       b.隶属机构I='1'    and    (药房序号I='14' or '14'='0')
348                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
349      group by  药房序号I,药品序号I,批次序号i
350  )
351   union  all
352  select
353     '出库'  业务大类,
354     '住院药品销售' 业务分类,
355     sum(西药成本金额) 西药成本,
356     sum(西药零售金额) 西药零售,
357     sum(中成药成本) 中成药成本,
358     sum(中成药零售)  中成药零售,
359     sum(中药成本合计)  中药成本合计,
360     sum(中药零售合计)  中药零售合计,
361     sum(中药成本合计+西药成本合计)  成本合计,
362     sum(中药零售合计+西药零售合计) 零售合计
363     from (
364  select
365   sum(case when  (b.业务来源='住院') and  药品类型i=1 then  b.成本单价*b.变化数量  else 0 end   ) As 西药成本金额,
366   sum( case when (b.业务来源='住院') and  药品类型i=1 then  b.零售单价*b.变化数量  else 0 end ) 西药零售金额,
367   sum(case when (药品类型i=2 or   药品类型i=4) and  (b.业务来源='住院')  then  b.成本单价*b.变化数量  else 0 end   ) As 中成药成本,
368   sum( case when (药品类型i=2 or   药品类型i=4) and  (b.业务来源='住院')  then  b.零售单价*b.变化数量  else 0 end  ) 中成药零售,
369    sum(case when  (b.业务来源='住院' )   then  b.成本单价*b.变化数量  else 0 end   )  As 西药成本合计,
370      sum( case when (b.业务来源='住院')  then  b.零售单价*b.变化数量  else 0 end ) As 西药零售合计,
371     0  中药成本合计,
372     0  中药零售合计
373    from dug_d西药房库存变化明细 b
374                    inner join doc_t药品目录_价格 bb on bb.系统序号 = b.药品序号i
375     inner join doc_t药品目录 cc on cc.系统序号 = bb.药品目录序号i
376      inner join doc_t药典目录 dd on dd.系统序号 = cc.药典序号i
377                   where       b.隶属机构I='1'  and     药品类型i !=5   and    (药房序号I='14' or '14'='0')
378                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
379      group by  药房序号I,药品序号I,批次序号i
380  union all
381  select
382   0 As 西药成本,
383       0 As 西药零售,
384      0 As 中成药成本,
385        0 As 中成药零售,
386        0 As 西药成本合计,
387       0 As 西药零售合计,
388       sum(case when  (b.业务来源='住院')   then  b.成本单价*b.变化数量  else 0 end   )   中药成本合计,
389     sum( case when (b.业务来源='住院')  then  b.零售单价*b.变化数量  else 0 end ) 中药零售合计
390    from dug_d中药房库存变化明细 b
391                   where       b.隶属机构I='1'    and    (药房序号I='14' or '14'='0')
392                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
393      group by  药房序号I,药品序号I,批次序号i
394  )union all
395  select
396  '出库'  业务大类,
397     '药房退货'  业务分类,
398   sum(西药成本) 西药成本,
399     sum(西药零售) 西药零售,
400     sum(中成药成本) 中成药成本,
401     sum(中成药零售)  中成药零售,
402     sum(中药成本合计)  中药成本合计,
403     sum(中药零售合计)  中药零售合计,
404     sum(中药成本合计+西药成本合计)  成本合计,
405     sum(中药零售合计+西药零售合计) 零售合计
406  from (select
407   sum(case when  业务来源 in ('药房退货','药房退货冲销')  and  药品类型i=1 then  b.成本单价*b.变化数量  else 0 end   ) As 西药成本,
408   sum( case when 业务来源 in ('药房退货','药房退货冲销')and  药品类型i=1 then  b.零售单价*b.变化数量  else 0 end ) 西药零售,
409   sum(case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('药房退货','药房退货冲销')  then  b.成本单价*b.变化数量  else 0 end   ) As 中成药成本,
410   sum( case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('药房退货','药房退货冲销')   then  b.零售单价*b.变化数量  else 0 end  ) 中成药零售,
411    sum(case when  业务来源 in ('药房退货','药房退货冲销')   then  b.成本单价*b.变化数量  else 0 end   )  As 西药成本合计,
412      sum( case when 业务来源 in ('药房退货','药房退货冲销')   then  b.零售单价*b.变化数量  else 0 end ) As 西药零售合计,
413     0  中药成本合计,
414     0  中药零售合计
415    from dug_d西药房库存变化明细 b
416                    inner join doc_t药品目录_价格 bb on bb.系统序号 = b.药品序号i
417     inner join doc_t药品目录 cc on cc.系统序号 = bb.药品目录序号i
418      inner join doc_t药典目录 dd on dd.系统序号 = cc.药典序号i
419                   where       b.隶属机构I='1'  and     药品类型i !=5  and    (药房序号I='14' or '14'='0')
420                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
421      group by  药房序号I,药品序号I,批次序号i
422  union all
423  select
424     0 As 西药成本,
425       0 As 西药零售,
426      0 As 中成药成本,
427        0 As 中成药零售,
428        0 As 西药成本合计,
429       0 As 西药零售合计,
430    sum(case when  业务来源 in ('药房退货','药房退货冲销') then  b.成本单价*b.变化数量  else 0 end   )  As  中药成本合计,
431    sum( case when 业务来源 in  ('药房退货','药房退货冲销')  then  b.零售单价*b.变化数量  else 0 end ) As 中药零售合计
432     from dug_d中药房库存变化明细 b
433                   where       b.隶属机构I='1'    and    (药房序号I='14' or '14'='0')
434                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
435      group by  药房序号I,药品序号I,批次序号i
436  )
437   union all
438  select
439  '出库'  业务大类,
440     '科室领用'  业务分类,
441   sum(西药成本) 西药成本,
442     sum(西药零售) 西药零售,
443     sum(中成药成本) 中成药成本,
444     sum(中成药零售)  中成药零售,
445     sum(中药成本合计)  中药成本合计,
446     sum(中药零售合计)  中药零售合计,
447     sum(中药成本合计+西药成本合计)  成本合计,
448     sum(中药零售合计+西药零售合计) 零售合计
449  from (
450   select
451   sum(case when  业务来源 in ('科室领用','科室领用冲销')  and  药品类型i=1 then  b.成本单价*b.变化数量  else 0 end   ) As 西药成本,
452   sum( case when 业务来源 in ('科室领用','科室领用冲销') and  药品类型i=1 then  b.零售单价*b.变化数量  else 0 end ) 西药零售,
453   sum(case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('科室领用','科室领用冲销')  then  b.成本单价*b.变化数量  else 0 end   ) As 中成药成本,
454   sum( case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('科室领用','科室领用冲销')   then  b.零售单价*b.变化数量  else 0 end  ) 中成药零售,
455    sum(case when  业务来源 in ('科室领用','科室领用冲销')   then  b.成本单价*b.变化数量  else 0 end   )  As 西药成本合计,
456      sum( case when 业务来源 in ('科室领用','科室领用冲销')   then  b.零售单价*b.变化数量  else 0 end ) As 西药零售合计,
457     0  中药成本合计,
458     0  中药零售合计
459    from dug_d西药房库存变化明细 b
460                    inner join doc_t药品目录_价格 bb on bb.系统序号 = b.药品序号i
461     inner join doc_t药品目录 cc on cc.系统序号 = bb.药品目录序号i
462      inner join doc_t药典目录 dd on dd.系统序号 = cc.药典序号i
463                   where       b.隶属机构I='1'  and     药品类型i !=5  and    (药房序号I='14' or '14'='0')
464                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
465      group by  药房序号I,药品序号I,批次序号i
466  union all
467  select
468     0 As 西药成本,
469       0 As 西药零售,
470      0 As 中成药成本,
471        0 As 中成药零售,
472        0 As 西药成本合计,
473       0 As 西药零售合计,
474    sum(case when  业务来源 in ('科室领用','科室领用冲销')  then  b.成本单价*b.变化数量  else 0 end   )  As  中药成本合计,
475    sum( case when 业务来源 in  ('科室领用','科室领用冲销')  then  b.零售单价*b.变化数量  else 0 end ) As 中药零售合计
476     from dug_d中药房库存变化明细 b
477                   where       b.隶属机构I='1'    and    (药房序号I='14' or '14'='0')
478                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
479      group by  药房序号I,药品序号I,批次序号i
480  )
481  union all
482  select
483  '出库'  业务大类,
484       '药房盘亏' 业务分类,
485  sum(西药成本) 西药成本,
486     sum(西药零售) 西药零售,
487     sum(中成药成本) 中成药成本,
488     sum(中成药零售)  中成药零售,
489     sum(中药成本合计)  中药成本合计,
490     sum(中药零售合计)  中药零售合计,
491     sum(中药成本合计+西药成本合计)  成本合计,
492     sum(中药零售合计+西药零售合计) 零售合计
493  from (
494  select
495   sum(case when  业务来源 in ('药房盘点','药房盘点反结转') and  药品类型i=1 and 变化数量<0  then  b.成本单价*b.变化数量  else 0 end   )
496  + sum(case when  业务来源 in ('药房盘点反结转') and  药品类型i=1  and 变化数量>0   then  b.成本单价*b.变化数量  else 0 end   )
497   As 西药成本,
498   sum( case when 业务来源 in ('药房盘点') and  药品类型i=1 and 变化数量<0  then  b.零售单价*b.变化数量  else 0 end ) +
499  sum( case when 业务来源 in ('药房盘点反结转') and  药品类型i=1  and 变化数量>0    then  b.零售单价*b.变化数量  else 0 end )
500  西药零售,
501   sum(case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('药房盘点')  and 变化数量<0  then  b.成本单价*b.变化数量  else 0 end   )
502  +sum(case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('药房盘点反结转')   and 变化数量>0     then  b.成本单价*b.变化数量  else 0 end   )
503   As 中成药成本,
504   sum( case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('药房盘点')  and 变化数量<0   then  b.零售单价*b.变化数量  else 0 end  )
505  +sum( case when (药品类型i=2 or   药品类型i=4) and  业务来源 in ('药房盘点反结转')  and 变化数量>0   then  b.零售单价*b.变化数量  else 0 end  )
506   中成药零售,
507    sum(case when  业务来源 in ('药房盘点') and 变化数量<0   then  b.成本单价*b.变化数量   else 0 end   )
508  + sum(case when  业务来源 in ('药房盘点反结转') and 变化数量>0     then  b.成本单价*b.变化数量  else 0 end   )
509   As 西药成本合计,
510      sum( case when 业务来源 in ('药房盘点')  and 变化数量<0   then  b.零售单价*b.变化数量  else 0 end )
511  + sum( case when 业务来源 in ('药房盘点反结转')  and 变化数量>0         then  b.零售单价*b.变化数量  else 0 end )
512  As 西药零售合计,
513     0  中药成本合计,
514     0  中药零售合计
515    from dug_d西药房库存变化明细 b
516                    inner join doc_t药品目录_价格 bb on bb.系统序号 = b.药品序号i
517     inner join doc_t药品目录 cc on cc.系统序号 = bb.药品目录序号i
518      inner join doc_t药典目录 dd on dd.系统序号 = cc.药典序号i
519                   where       b.隶属机构I='1'  and     药品类型i !=5   and    (药房序号I='14' or '14'='0')
520                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
521      group by  药房序号I,药品序号I,批次序号i
522  union all
523  select
524        0 As 西药成本,
525       0 As 西药零售,
526      0 As 中成药成本,
527        0 As 中成药零售,
528        0 As 西药成本合计,
529       0 As 西药零售合计,
530           sum(case when  业务来源 in ('药房盘点') and 变化数量<0   then  b.成本单价*b.变化数量  else 0 end   )
531   + sum(case when  业务来源 in ('药房盘点反结转')  and 变化数量>0   then  b.成本单价*b.变化数量  else 0 end   )
532   As 中药成本合计,
533         sum( case when 业务来源 in ('药房盘点') and 变化数量<0   then  b.零售单价*b.变化数量  else 0 end )
534  + sum( case when 业务来源 in ('药房盘点反结转')   and 变化数量>0       then  b.零售单价*b.变化数量  else 0 end )
535  As 中药零售合计
536      from dug_d中药房库存变化明细 b
537                   where       b.隶属机构I='1'   and    (药房序号I='14' or '14'='0')
538                   and  b.操作时间 between to_date('2019-03-01 00:00:00','yyyy-mm-dd hh24:mi:ss') and  to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
539      group by  药房序号I,药品序号I,批次序号i
540  )
541  union  all
542  select  '期末'  业务大类,
543      '-------' 业务分类,
544        sum(西药成本)  西药成本,
545        sum(西药零售)  西药零售,
546        sum(中成药成本)  中成药成本,
547        sum(中成药零售)  中成药零售,
548        sum(中药成本合计)  中药成本,
549        sum(中药零售合计)  中药零售,
550         sum(中药成本合计+西药成本合计) 成本合计,
551        sum(中药零售合计+西药零售合计) 零售合计
552        from  ( select
553   sum(case when 药品类型i=1  then  A.变化后库存数量*A.成本单价 else 0 end ) 西药成本
554      ,SUM( case when 药品类型i=1  then  A.变化后库存数量*A.零售单价 else 0 end ) 西药零售,
555      sum(case when (药品类型i=2 or   药品类型i=4) then  A.变化后库存数量*A.成本单价 else 0 end ) 中成药成本
556      ,SUM( case when (药品类型i=2 or   药品类型i=4)  then  A.变化后库存数量*A.零售单价  else 0 end ) 中成药零售,
557      sum(A.变化后库存数量*A.成本单价) As 西药成本合计,
558      sum(A.变化后库存数量*A.零售单价) As 西药零售合计,
559      0 中药成本合计,
560        0 中药零售合计
561          from dug_d西药房库存变化明细 A
562  inner join (select  批次序号i,药房序号I,药品序号I,max(系统序号) As 系统序号 from dug_d西药房库存变化明细 where 操作时间<= to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
563  and 隶属机构I='1'
564         group by  药房序号I,药品序号I,批次序号i) B on A.系统序号=B.系统序号
565      inner join doc_t药品目录_价格 bb on bb.系统序号 = b.药品序号i
566     inner join doc_t药品目录 cc on cc.系统序号 = bb.药品目录序号i
567      inner join doc_t药典目录 dd on dd.系统序号 = cc.药典序号i
568   where 药品类型i !=5    and    (a.药房序号I='14' or '14'='0')
569   union all
570  select
571      0 西药成本
572      ,0  西药零售,
573      0 中成药成本
574      ,0  中成药零售
575      ,0  西药成本合计
576      ,0 西药零售合计,
577      sum(A.变化后库存数量*A.成本单价) As 中药成本合计,
578      sum(A.变化后库存数量*A.零售单价) As 中药零售合计
579          from dug_d中药房库存变化明细 A
580  inner join (select  批次序号i,药房序号I,药品序号I,max(系统序号) As 系统序号 from dug_d中药房库存变化明细 where 操作时间<= to_date('2019-03-31 23:59:59','yyyy-mm-dd hh24:mi:ss')
581  and 隶属机构I='1'   and  (药房序号I='14' or '14'='0')
582         group by  药房序号I,药品序号I,批次序号i) B on A.系统序号=B.系统序号
583    )) T ;


 

猜你喜欢

转载自blog.csdn.net/ljl_name/article/details/89019983