设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2603|回复: 9
打印 上一主题 下一主题

[查询] 查询中的合计数量有问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-2-3 12:02:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基础物品数据(含全部货名信息),入库表的数量为300,出库表的数量为278,期初余额表的上期结存数量为9,四表间以货名为关系进行链接。
使用查询,得到数量,sql语句如下:
SELECT 基础物品数据.货名, Sum(nz(入库表.数量)-nz(出库表.数量)+nz(期初余额.上期结存数量)) AS 本月库存
FROM ((基础物品数据 LEFT JOIN 入库表 ON 基础物品数据.货名 = 入库表.货名) LEFT JOIN 出库表 ON 基础物品数据.货名 = 出库表.货名) LEFT JOIN 期初余额 ON 基础物品数据.货名 = 期初余额.货名
GROUP BY 基础物品数据.货名

但是得到的结果是数量为:8322,但是实际数量应为9+300-278=31

请帮助看看哪里有问题?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2009-2-3 12:54:41 | 只看该作者
示例在哪昵?
3#
 楼主| 发表于 2009-2-3 12:58:41 | 只看该作者
没有上传附件,1楼有查询的sql语句
4#
发表于 2009-2-3 13:05:12 | 只看该作者
你用了LEFT JOIN,这样在产生的笛卡尔积中,很多记录被重复了多次。

select m.货名,nz(i.sQty)-nz(o.sQty)+nz(b.上期结存数量) as 本月库存
from ((基础物品数据 m left join (select 货名,sum(数量) as sQty from 入库表 group by 货名) i) on m.货名=i.货名
    left join (select 货名,sum(数量) as sQty from 出库表 group by 货名) o on m.货名=o.货名)
    left join 期初余额 b on  on m.货名=b.货名;
   
或者,两个SQL语句效率或许不一样。
select m.货名,sum(数量) as 本月库存
from 基础物品数据 m left join (
    select 货名,数量 from 入库表
    union all
    select 货名,-数量 from 出库表
    union all
    select 货名,上期结存数量 from 期初余额) b
    on m.货名=b.货名





******************
*  一切皆有可能  *
******************


QQ群 48866293 / 12035577 / 7440532 / 13666209
http://forum.csdn.net/SList/Access .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
http://www.office-cn.net .
.
http://www.office-cn.net/home/space.php?uid=141646 .
5#
发表于 2009-2-3 13:15:58 | 只看该作者
select m.货名,sum(数量) as 本月库存
from 基础物品数据 m left join (
    select 货名,数量 from 入库表
    union all
    select 货名,-数量 from 出库表
    union all
    select 货名,上期结存数量 from 期初余额) b
    on m.货名=b.货名

ACMAIN_CHM 发表于 2009-2-3 13:05


6#
 楼主| 发表于 2009-2-3 13:33:55 | 只看该作者
你用了LEFT JOIN,这样在产生的笛卡尔积中,很多记录被重复了多次。

select m.货名,nz(i.sQty)-nz(o.sQty)+nz(b.上期结存数量) as 本月库存
from ((基础物品数据 m left join (select 货名,sum(数量) as sQty fr ...
ACMAIN_CHM 发表于 2009-2-3 13:05


谢谢。

在第一段,
select m.货名,nz(i.sQty)-nz(o.sQty)+nz(b.上期结存数量) as 本月库存
from ((基础物品数据 m left join (select 货名,sum(数量) as sQty from 入库表 group by 货名) i) on m.货名=i.货名
    left join (select 货名,sum(数量) as sQty from 出库表 group by 货名) o on m.货名=o.货名)
    left join 期初余额 b on  on m.货名=b.货名;
   
提示“FORM子句语法错误”


在第二段,
select m.货名,sum(数量) as 本月库存
from 基础物品数据 m left join (
    select 货名,数量 from 入库表
    union all
    select 货名,-数量 from 出库表
    union all
    select 货名,上期结存数量 from 期初余额) b
    on m.货名=b.货名


提示“试图执行的查询中不包含作为合计函数一部分的特定表达式‘货名’”
7#
发表于 2009-2-3 15:22:05 | 只看该作者
select m.货名,nz(i.sQty)-nz(o.sQty)+nz(b.上期结存数量) as 本月库存
from ((基础物品数据 m left join (select 货名,sum(数量) as sQty from 入库表 group by 货名) i on m.货名=i.货名)
    left join (select 货名,sum(数量) as sQty from 出库表 group by 货名) o on m.货名=o.货名)
    left join 期初余额 b on  on m.货名=b.货名;



select m.货名,sum(数量) as 本月库存
from 基础物品数据 m left join (
    select 货名,数量 from 入库表
    union all
    select 货名,-数量 from 出库表
    union all
    select 货名,上期结存数量 from 期初余额) b
    on m.货名=b.货名
group by m.货名






******************
*  一切皆有可能  *
******************


QQ群 48866293 / 12035577 / 7440532 / 13666209
http://forum.csdn.net/SList/Access .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
http://www.office-cn.net .
.
http://www.office-cn.net/home/space.php?uid=141646 .
8#
 楼主| 发表于 2009-2-3 15:43:38 | 只看该作者
谢谢。
使用的是第二段语句,第一句出现错误:“语法错误(操作符丢失)在查询表达式'on m.货名=b.货名'中”。
9#
发表于 2009-2-3 15:48:51 | 只看该作者
多了个on
10#
 楼主| 发表于 2009-2-3 16:21:29 | 只看该作者
哦,是的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-22 16:41 , Processed in 0.359505 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表