求sql语句 (用进货数减去售出数,从而得到存货数)(70分)

  • 主题发起人 主题发起人 一少
  • 开始时间 开始时间

一少

Unregistered / Unconfirmed
GUEST, unregistred user!
ACCESS数据库

配件表(pj)
pjid
pjname (配件名)

进货表(stock)
id
pjid
stockcount (进货数)

售出表 (sell)
id
pjid
sellcount 售出 数

我是这样写的,行不通,哪个朋友指点一下,就这么点分了,不够的话有了再送上
SELECT pj.pjname, sum(stock.stockcount)-sum(sell.sellcount)
FROM (stock INNER JOIN sell ON sell.pjid = stock.pjid) inner join pj on pj.pjid=stock.pjid
GROUP BY stock.pjid;
 
SELECT Pj.pjname,sum (Stock.stockcount)-sum(Sell.sellcount)
FROM stock INNER JOIN sell ON Stock.pjid = Sell.pjid,pj
GROUP BY Stock.pjid
WHERE pj.pjid=stock.pjid
 
SELECT a.pjname,sum (b.stockcount)-sum(c.sellcount)
FROM pj a left join stock b on a.pjid=b.pjid
left join sell c on a.pjid=c.pjid
GROUP BY a.pjname
 
两位给的语句我试了,和我的一样,还是不能正确统计,怪上上午发的时候太急了,没说清楚
这个现象感觉真的很怪

就以ugvanx兄的这条语句为例吧
SELECT a.pjname,sum (b.stockcount)-sum(c.sellcount)
FROM pj a left join stock b on a.pjid=b.pjid
left join sell c on a.pjid=c.pjid
GROUP BY a.pjname

现在在pj表中有两条数据
pjid pjname
1 车轮
2 车灯

stock(进货)表中3条数据
id pjid stockcount(进货数)
1 1 3
2 1 5
3 2 10

sell(售出)表中3条数据
id pjid sellcount(售出数)
1 1 2
2 1 3
3 2 5

执行上面的sql语句后结果应该为
车轮 3
车灯 5
然而结果不是这样,而且stock,sell表中的数据越多,出入越大,大到几十倍几百倍都可能的,不知
各位有没有遇到过这样的情况?我用的access数据库,直接在access查询中测试的
 
你这种做法理论是可以的,
但在实际中却是不可行的,如果你的数据越来越多的时候,你的操作就变成不可能的了
 
to hpretty :说清楚点啊,老兄

我试过对单个表分组查询,一切正常
select sum(stockcount) from stock group by pjid
select (sellcount from) sell group by pjid
都能得出正确的结果,可一旦两个表关联,结果就不对了,这是为什么啊,是我代码写得不对
还是根本就无法用一条语句来实现?
 
是分组的问题你分开统计时stock和sell 都按分组了,
而连接起来以后GROUP BY stock.pjid,就只有stock分组了所以出错。
 
to zwhbin

我现在应该怎么写?
 
俺以为,你的数据结构本身就有缺陷
B表和C表完全可以合并,sell可以用负数表示,
这样什么都解决的了,而且总体执行效率不知要提高多少倍。
(你可在一旁偷偷乐吧。)
 
数据库结构有缺陷?

大家来说说啊,如果真的是这样的话,小弟把数据库改了
 
我已经解决了

select peijian.pjid,peijian.pjname,sumstock.allstock,sumsell.allsell from
(peijian left join
(select stock.pjid, sum(stock.stockcount) as allstock from stock group by stock.pjid)
as sumstock on sumstock.pjid=peijian.pjid)
left join (select sell.pjid, sum(sell.sellcount) as allsell from sell group by sell.pjid) as sumsell
on sumsell.pjid=peijian.pjid
 
用你的方法是可以做的吗,数据结构不用改,有个办法是可以更方便的

就是在ACCESS里先做个联合查询,将stock和SELL的数据合并为一,再操作就方便多了
 
接受答案了.
 
后退
顶部