一个库存月报的SQL查询语句该如何写,分数不够再加。 (50分)

  • 主题发起人 lindeping
  • 开始时间
L

lindeping

Unregistered / Unconfirmed
GUEST, unregistred user!
一个库存月报的SQL查询语句该如何写:数据库为SQLSERVER2000
需要得到的数据如下:

材料名称 直径 本期收入 本期发出 当前库存 金额 供应商
40Cr 7.5 2500 500 2000 10000 西北长特
21-4N 8.0 2500 0 2500 20000 中远大
… … … … … … …

可从如下数据表中拿数:‘()’内为中文说明
1过磅单pound
字段:
poundid (单号) provider(供应商) …

2 入库登记表 input
字段:
inputid(入库登记号) poundid(磅码单号) weigh(入库重量) inputdate(入库日期) …

3 库存表 stock
字段:
stockid(库存号) inputid(入库登记号) trademark(材料名称) diameter(直径) curstock(当前库存) money(金额) …

4 发出登记表 send
字段:
sendid(发料登记号) stockid(材料库存号) weigh(工件用料) waste(预计损耗) senddate(发出日期) ….

要求:按 供应商 材料名称 直径 分组汇总
其中 本期发出 = send.weigh + send.waste,如果本期没有发出的用0表示
本期收入 = input.weigh
材料名称和直径可从stock表中取得。
我用如下语句:
select a.trademark as 材料牌号,a.diameter as 直径,sum(b.weigh) as 本期收入,
sum(d.weigh+d.waste) as 本期发出,sum(a.curstock) as 当前库存,
sum(a.money) as 金额,c.provider as 供应商
from pound c INNER JOIN
input b ON c.poundid = b.poundid INNER JOIN
stock a ON b.inputid = a.inputid,send d
where (a.stockid=d.stockid) and (b.inputdate between '2002-10-30' and '2002-11-30')
and (d.senddate between '2002-10-30' and '2002-11-30')
group by c.provider,a.trademark,a.diameter

只能得到本期有发出的材料的数据,对于本期没有发出过的材料就得不到啦。

各位大虾指教指教,分数不够再加。


 
//from pound c INNER JOIN
// input b ON c.poundid = b.poundid INNER JOIN
// stock a ON b.inputid = a.inputid,send d
from pound c left JOIN
input b ON c.poundid = b.poundid left JOIN
stock a ON b.inputid = a.inputid,send d
 
顶部