收录日期:2020/06/02 18:40:05 时间:2016/06/12 02:12:20 标签:Access
根据高手指点,在"采购表"和"销售表"中查出了当前的库存量.
目前还需要在"出库表"和"销售表"中查出各个销售点的当前库存量.
在"出库表"和"销售表"都有"销售点"字段.

附: 查询当前全部库存的方法.
--用union all处理,如:

select 材料编码,sum(数量) as 剩余数量
from 
  (
    select 材料编码,数量 
    from 采购表
    union all
    select 材料编码,数量 * (-1) as 数量
    from 销售表
  ) as T
group by 材料编码
你不将记录及正确结果贴出来,别人怎么帮助你?
目前的表是这样的:

出库表
日期        销售点   产品编号    出库数量
07-07-01       A       9887        6
07-07-01       A       9675        19 
07-07-01       B       9675        7
07-07-01       C       9887        8

销售表
日期        销售点   产品编号    销售数量
07-07-03      A       9887        3
07-07-08      B       9675        2
07-07-09      C       9887        4
07-07-10      A       9887        1

希望得到的结果:

库存查询
   销售点   产品编号    库存数量
      A       9887        2
      A       9675        19
      B       9675        5
      C       9887        4

假设各个销售点、产品编号在两表中均有记录:
select a.销售点,a.产品编号,sum(nz(出库数量,0)-nz(销售数量,0)) as 库存数量 from 出库表 a
left join 销售表 b
on a.销售点=b.销售点 and a.产品编号=b.产品编号
group by a.销售点,a.产品编号

否则,将两表连接再GROUP BY
OR
select C.销售点,C.产品编号,sum(nz(出库数量,0)-nz(销售数量,0)) as 库存数量 from (
(SELECT 销售点,产品编号 FROM 出库表 UNION SELECT 销售点,产品编号 FROM 销售表) C
LEFT JOIN 出库表 a ON a.销售点=C.销售点 and a.产品编号=C.产品编号)
left join 销售表 b
on C.销售点=b.销售点 and C.产品编号=b.产品编号
group by C.销售点,C.产品编号
--继续用union all,按销售点和产品编号分组:

select 销售点, 产品编号,sum(num) as 库存数量
from 
  (
    select 销售点,产品编号,出库数量 as  num
    from 采购表
    union all
    select 销售点,产品编号,销售数量 * (-1) as num
    from 销售表
  ) as T
group by 销售点,产品编号
--使用union all最简单,按销售点和产品编号分组:

--注意:access的SQL语句中别名不能与原字段名相同


select 销售点, 产品编号,sum(num) as 库存数量
from 
  (
    select 销售点,产品编号,出库数量 as  num
    from 采购表
    union all
    select 销售点,产品编号,销售数量 * (-1) as num
    from 销售表
  ) as T
group by 销售点,产品编号

Access使用的是Jet-SQL,SQL Server使用的是T-SQL,两者用法上相差很大。


JET SQL 帮助(jet4 access2000)下载地址

http://www.access911.net/index.asp?board=8&recordid=75FAB71E&tt=


楼上的老师:
用联合查询已经得出数据, 但出现了一个新的情况;

查询的结果中, "销售点"都变成了销售点的代号, 而不是销售点本身.

在表中, 所有的销售点都记录在一张"销售点"表中, 结构如下;

销售点代号   销售点名称 .....
01               A
02               B

在关系中, 无论是把"销售点"表中"销售点代号" 或"销售点名称" 与销售表"中的销售点名称关联, 查询出来的结果在"销售点"一栏中, 都只是销售点代号.

如果单看销售表和采购表, 实际显示的也是销售点名称. 

销售点名称 产品编号        库存数量
1 BF 40 0070 1
10 热裱明信片 40
11 IR 12 0001-2 3
11 热裱明信片 44
13 IA 20 0224 1

补充说明: 以下是我运行联合查询得到的结果. 显然要改进"销售点名称"这一项,但如何呢? 请高手继续指点, 多谢了!

销售点名称 产品编号      库存数量
1          BF 40 0070 1
10          热裱明信片 40
11          IR 12 0001-2 3
11          热裱明信片 44
13          IA 20 0224 1
select c.*,d.销售点名称 from (
select 销售点, 产品编号,sum(num) as 库存数量
from
(
select 销售点,产品编号,出库数量 as num
from 采购表
union all
select 销售点,产品编号,销售数量 * (-1) as num
from 销售表
) as T
group by 销售点,产品编号) c
left join 销售点 d on c.销售点=d.销售点
or
select 销售点, 产品编号,d.销售点名称,sum(num) as 库存数量
from
(
select 销售点,产品编号,出库数量 as num
from 采购表
union all
select 销售点,产品编号,销售数量 * (-1) as num
from 销售表
) as T
left join 销售点 d on t.销售点=d.销售点
group by 销售点,产品编号,d.销售点名称
wwwwb(): 按照您的指点,没有办法出结果.想是因为没有理解中间那些 d t 的含义和用法吧.
还是希望wangtiecheng再指点一下.谢了! 就差一步了!!!
sql语句没有问题,检查一下记录内容、类型
终于找到了原因.

用WANGTIECHENG的方法又解决了问题!

好!我一定要把这个好地方推荐给朋友们.

又提了一个问题, 还是要等回答, 谢谢了喔!

2000环境下,拨号时会出现:错误720:。。。。。。。 怎樣在數據表中復制一條記錄﹖并將新復制的記錄修改后插入到原表中﹖ 请教一个关于edit box的问题. 输入http://localhost:8080显示欢迎页面但无法显示JSP页面 怎么实现与数据库绑定,刚学vb,请帮忙 为什么可以正常上网的机器常弹出一个窗口? 如何设置隐藏URL转发 Windows又进不去了…… 请问用c#开发手机等移动设备应用程序需要哪些东西? 靓女唱歌,无聊进来听听 小弟要做个图书管理系统(类似毕业设计)有点小问题请指教!, 关于sscanf的问题 关于编写事件日志的问题? 怎么能看到一个做好的pb应用程序的源代码? 怎么在MEMO种显示收到的邮件IDMESSAGE? 为什么我的机器每次屏保过后再按键就蓝屏死机,休眠后也死机,有一次停用1小时回来后死机,并且不能启动(安全也不行) 我写的程序执行后出现堆栈溢出,应该怎么办? 在线程中动态生成的ClientSocket不触发OnConnect和OnRead事件,怎么办? 请问哪里有介绍PDA通讯串口编程的网站(C/C++语言)? 我在有的机器上用request(\"username\")作函数参数可得到正确结果,但在有的机器上必须使用cstr(request(\"username\"))作参数才能得到正确结\0 刚学c#,有个小问题,请大家帮帮忙,谢谢! How to send a e-mail to operator when the disk out of space?(wait online) 哪位大侠出手!关于标准的CCITT-16的CRC校验的算法 这样一个多表关联查询的SQL语句该如何写? 强烈建议CSDN扩容!!风速太慢了!!快受不了! 请大虾们指教 如何使用别的web服务器而不是oracle,或web服务器与数据库服务器不在同一台机器上,想要调用oracle report做的报表该如何调用? 急!!!!恢复数据库的问题 大虾帮忙,水晶报表怎么在VB的打包之后可是正常使用? 我的主页大家提提意见和建议,谢谢