为什么结果不是SQL的本意???

yjdabc 2005-04-14 10:40:34
select 1 as 序号,bh as 编号,mc as 名称,jx as 适用机型,cd as 产地,
数量=sum(sl),金额=sum(sl*dj1)
from
(
select 1 as 序号,bh,mc,jx,sl,dj1,cd from 库存表 where bh = '001904001'
union
select 1 as 序号,bh,mc,jx,-sl,dj1,cd from 领料表 where bh = '001904001'
) a group by bh,mc,jx,cd
having sum(sl)>0 order by 编号

库存表中bh= '001904001'的记录
bh mc jx cd sl
001904001 磨轴 通用 北京 1.000
001904001 磨轴 通用 上海 32.000
001904001 磨轴 通用 北京 1.000

领料表中bh= '001904001'的记录
001904001 磨轴 通用 北京 1.000
001904001 磨轴 通用 上海 13.000
001904001 磨轴 通用 上海 6.000
001904001 磨轴 通用 上海 13.000
001904001 磨轴 通用 北京 1.000

这样语句的功能要求是求出库存中剩余的物品,并按bh,mc,jx,cd 分组汇总,但执行这条语句的结果是:

001904001 磨轴 通用 上海 13.000
也就说北京产地的物品结果是正确的,(1+1-1-1=0) 因为查看剩余的所以这条不显示,但上海产地的不对,也应该是0(32-13-6-13 =0),我看了好久也不清楚错误在哪,结果是0的请大家帮我看看!!!
谢谢!!!
...全文
61 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjdabc 2005-04-14
  • 打赏
  • 举报
回复
谢谢!!!
Navywang917 2005-04-14
  • 打赏
  • 举报
回复
呵呵,楼上说得正确哟!
paoluo 2005-04-14
  • 打赏
  • 举报
回复
使用union All会去掉你两次得出数据中的重复数据。
xluzhong 2005-04-14
  • 打赏
  • 举报
回复
union all ----不压缩,不排序
union ----压缩重复数据,并排序
xluzhong 2005-04-14
  • 打赏
  • 举报
回复
select 1 as 序号,bh as 编号,mc as 名称,jx as 适用机型,cd as 产地,
数量=sum(sl),金额=sum(sl*dj1)
from
(
select 1 as 序号,bh,mc,jx,sl,dj1,cd from 库存表 where bh = '001904001'
union all ---union 压缩重复数据
select 1 as 序号,bh,mc,jx,-sl,dj1,cd from 领料表 where bh = '001904001'
) a group by bh,mc,jx,cd
having sum(sl)>0 order by 编号

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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