找区别,结果数据不一样。金箍棒变长变长变长变长长长长

止水i 2016-01-14 10:27:41

select c.编码||b.名称 as 药品名称,
b.规格,
decode (/*B3*/1/*E3*/,1,c.售价单位,2,c.门诊单位,3,c.住院单位,4,c.药库单位,c.售价单位) as 单位,
g.实际数量/decode(/*B3*/1/*E3*/,2,c.门诊包装,3,c.住院包装,4,c.药库包装,1) as 实际数量,
to_char(g.零售价,'9999990.00') as 零售价 ,
to_char(g.零售金额,'9999990.00') as 零售金额

from (select 药品id,sum(实际数量) as 实际数量,avg(零售价) as 零售价,sum(零售金额) as 零售金额 from 药品收发记录 group by 药品id) g ,
药品收发记录 a,收费项目目录 b, 药品目录 c
where b.id = a.药品id
and g.药品id = a.药品id
and c.药品id = a.药品id
and a.审核日期 between /*B0*/TO_DATE('2015-12-01 00:00:00','YYYY-MM-DD HH24:MI:SS')/*E0*/ and /*B1*/TO_DATE('2016-01-14','YYYY-MM-DD')/*E1*/
and a.单据 in (8,9,10) and a.发药方式 in (1,2,3)
and a.库房id /*B2*/is not null/*E2*/


——————————————————————————————————————————
select 
a.编码||a.名称 as 药品名称,a.规格,
gg.实际数量/decode (/*B3*/1/*E3*/,2,a.门诊包装,3,a.住院包装,4,a.药库包装,1) as 实际数量,
decode(/*B3*/1/*E3*/,1,a.售价单位,2,a.门诊单位,3,a.住院单位,4,a.药库单位,a.售价单位) as 单位,
gg.零售价,gg.零售金额
from
(select
药品id ,库房id,
sum(实际数量) as 实际数量,
avg(零售价) as 零售价,
sum(零售金额) as 零售金额
from
药品收发记录
where
单据 in (8,9,10) and 发药方式 in (1,2,3)
and 审核日期 between /*B1*/TO_DATE('2015-12-01 00:00:00','YYYY-MM-DD HH24:MI:SS')/*E1*/ and /*B2*/TO_DATE('2016-01-14 23:59:59','YYYY-MM-DD HH24:MI:SS')/*E2*/
group by 药品id,库房id) GG,药品目录 a , 部门表 b
where
b.id /*B0*/is not null/*E0*/ and a.药品id = gg.药品id and b.id=gg.库房id
...全文
182 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
MrLeiQ 2016-01-15
  • 打赏
  • 举报
回复
先来理解一下你的SQL1,比如药品收发记录表的记录只有我(药品1);我昨天吃了1个苹果,今天吃了2个苹果,不加任何条件的说我一共吃了3个苹果,平均一天吃1.5个苹果,对不对?这个数据就是g表的数据,又说今天吃过苹果的人有谁啊?只有我对不对,这就相当于abc表得出的符合条件的药品,然后与g表关联,最外层取的结果是g表中我的记录,得到的结果就是我吃了3个苹果,平均一天吃1.5个,对不对?你理解一下,你本来只想要今天我吃苹果的情况(吃了2个苹果,平均吃2个),可结果不只包含今天还包含昨天的数据。总之,第二个SQL的写法是正确的,不知道你理解了没有。
止水i 2016-01-15
  • 打赏
  • 举报
回复
T.T
止水i 2016-01-15
  • 打赏
  • 举报
回复
谢谢。
止水i 2016-01-14
  • 打赏
  • 举报
回复
引用 3 楼 fengzhenda 的回复:
简单说就是你第一个SQL最外层使用的数量、零售价和金额是别名为G的数据,而你的G表本身没有加任何条件限制,第二个SQL最外层使用的数量、零售价和金额是别名为GG的数据,GG是加完条件限制后计算出的数据,所以结果不同。
我在里面加的条件等值跟外面加的条件等值 好像都是一样的 结果应该也是一样的吧? 还请指导
MrLeiQ 2016-01-14
  • 打赏
  • 举报
回复
简单说就是你第一个SQL最外层使用的数量、零售价和金额是别名为G的数据,而你的G表本身没有加任何条件限制,第二个SQL最外层使用的数量、零售价和金额是别名为GG的数据,GG是加完条件限制后计算出的数据,所以结果不同。
止水i 2016-01-14
  • 打赏
  • 举报
回复
引用 1 楼 fengzhenda 的回复:
这个还用找吗,通过SQL看到avg(零售价)那可以知道你的零售价不同时间肯定是不同的,所以你2个SQL子查询部分的基础数据本身就不同,起码同一个药品id的平均零售价就已经不同了,结果数据也一定不会一样。
elect sum(实际数量) as 实际数量, avg(零售价) as 零售价, sum(零售金额) as 零售金额 我两条记录都是取 这三个函数啊 ,。 怎么会不一样 这两张表都想表达一个意思。但是不知道区别在哪里。 可以说的仔细点吗
MrLeiQ 2016-01-14
  • 打赏
  • 举报
回复
这个还用找吗,通过SQL看到avg(零售价)那可以知道你的零售价不同时间肯定是不同的,所以你2个SQL子查询部分的基础数据本身就不同,起码同一个药品id的平均零售价就已经不同了,结果数据也一定不会一样。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧