求库存统计SQL语句(100分)

  • 主题发起人 主题发起人 savetime
  • 开始时间 开始时间
S

savetime

Unregistered / Unconfirmed
GUEST, unregistred user!
现有三个表“物料表”和“库存主表”和“库存明细表”

其主要结构是

“物料表.编号”(主键)

“库存主表.单据编号”(主键)
“库存主表.操作类型” =0:入库 =1:出库

“库存明细表.单据编号”(外键)
“库存明细表.物料编号”(外键)
“库存明细表.数量”


问题:求出所有物料的“入库统计”、“出库统计”和“现有库存”统计(SQL语句)
(最好是ADO+ACCESS2000可执行的语句,其它数据库的也行,我现在是用DELPHI的
"Calculate"和"Lookup"以及几个ACCESS的"View",麻烦得不得了,求最简方案。)

顺便问一下,一般的进销存中“现有库存”是单独存成数据还是临时计算出来的?
 
先搞“入库统计”、“出库统计”和“现有库存”等几个视图,然后再从中join查询
 
入库统计:
select 库存明细表.单据编号,库存明细表.物料编号,库存明细表.数量 from
库存明细表 ,库存主表 where 库存明细表.单据编号=库存主表.单据编号 and
库存主表.操作类型=0

出库统计:
select 库存明细表.单据编号,库存明细表.物料编号,库存明细表.数量 from
库存明细表 ,库存主表 where 库存明细表.单据编号=库存主表.单据编号 and
库存主表.操作类型=1

现有库存:
这个比较麻烦,ACCESS2000可能难以直接完成

 

  先用這個SQL建立一個視圖﹐create view 統計視圖 as
select a.單据編號,a.操作類型,b.物料編號,b.數量 from
庫存主表 a,庫存明細表 b where a.單据編號=b.單据編號
1﹒入庫統計﹕
select 物料編號,sum(數量) as 總的入庫 from 統計視圖
where 操作類型=0 group by 物料編號
2.出庫統計﹕
select 物料編號,sum(數量) as 總的出庫 from 統計視圖
where 操作類型=0 group by 物料編號
3﹒庫存統計﹕
可將入庫﹑出庫的查詢建立臨時表﹐再用類似這樣的SQL語句﹕select a.物料編號,a.數量-b.數量......
注意要用左連結﹒
 
我现在就是这样做的,不过ACCESS的双LEFT OUTER JOIN很难用,我只好在
DELPHI中用LOOKUP和CALCULATE实现。
我很想知道用一句语句或更简单的方式实现的,例如不用VIEW。
 
SELECT Ms.编号,
SUM(IIF(ISNULL(TIn.数量),0,TIn.数量)-IIF(ISNULL(Out.数量),0,Out.数量)) AS 数量
FROM (物料表 AS Ms LEFT JOIN
(SELECT L.物料编号 AS 编号, SUM(IIF(ISNULL(L.数量),0,L.数量)) AS 数量
FROM 库存主表 AS M INNER JOIN 库存明细表 AS L ON M.单据编号 = L.单据编号
WHERE M.操作类型=0
GROUP BY L.物料编号 ) AS TIn
ON Ms.编号 = TIn.编号) LEFT JOIN
(SELECT L.物料编号 AS 编号, SUM(IIF(ISNULL(L.数量),0,L.数量)) AS 数量
FROM 库存主表 AS M INNER JOIN 库存明细表 AS L ON M.单据编号 = L.单据编号
WHERE M.操作类型=1
GROUP BY L.物料编号) AS TOut
ON Ms.编号 = TOut.编号
ACCESS中通过
 
可以有一些象“漏掉括号”等这样的错误,反正思路是如此,你自己看一下就明白了
 
to oceanwave:
先生果然高人,在下看了半天才弄明白,不过尚有一点小问题还请解惑:

ACCESS中有NZ()函数直接将空值转换为0,但为何不能在DELPHI SQL中用,而要用长长的
IIF语句?
如果是因为 NZ 是 VBSCRIPT 而不是 SQL 函数,但 IIF 和 ISNULL 是 SQL 函数吗?
 
各位大侠,分给oceanwave了,他的答案我想对大家都有受益。
 
后退
顶部