库存明细帐处理示例-萤火虫
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> ADP及SQL SERVER


库存明细帐处理示例

发表时间:2018/6/7 23:45:06 评论(0) 浏览(4811)  评论 | 加入收藏 | 复制
   
摘 要:库存明细帐处理示例,sql 2005运行正常
正 文:
Create TABLE tb(
ID int PRIMARY KEY identity(1,1),
Item varchar(10),  --产品编号
Quantity int,      --交易数量
Flag bit,          --交易标志,1代表入库,0代表出库,这样可以有效区分退货(负数)
Date datetime)     --交易日期
insert into tb values ('aa',100,1,'2005-1-1')
insert into tb values ('aa',90 ,1,'2005-2-1')
insert into tb values ('aa',55 ,0,'2005-2-1')
insert into tb values ('aa',-10,1,'2005-2-2')
insert into tb values ('aa',-5 ,0,'2005-2-3')
insert into tb values ('aa',200,1,'2005-2-2')
insert into tb values ('aa',90 ,1,'2005-2-1')
insert into tb values ('bb',95 ,1,'2005-2-2')
insert into tb values ('bb',65 ,0,'2005-2-3')
insert into tb values ('bb',-15,1,'2005-2-5')
insert into tb values ('bb',-20,0,'2005-2-5')
insert into tb values ('bb',100,1,'2005-2-7')
insert into tb values ('cc',100,1,'2005-1-7')


--查询时间段定义
DECLARE @dt1 datetime,@dt2 datetime
Select @dt1='2005-2-1',@dt2='2005-2-10'


--查询
--统计时间段内无发生额的数据(如果这个不是查询需要的,去掉这段查询)
Select Item,
Date=CONVERT(char(10),@dt1,120),
Opening=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END),
[IN]=0,
[IN_Retrun]=0,
[OUT]=0,
[OUT_Return]=0,
Balance=SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb a
Where Date<@dt1 AND NOT EXISTS(
Select * FROM tb Where Item=a.Item AND Date>@dt1 AND Date<DATEADD(Day,1,@dt2))
GROUP BY Item
UNION ALL
--指定时间段内有交易发生的数据
Select Item,
Date=CONVERT(char(10),Date,120),
Opening=ISNULL((Select SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb Where Item=a.Item AND Date<MIN(a.Date)),0),
[IN]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity>0 THEN Quantity END),0),
[IN_Retrun]=ISNULL(SUM(CASE WHEN Flag=1 AND Quantity<0 THEN -Quantity END),0),
[OUT]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity>0 THEN Quantity END),0),
[OUT_Return]=ISNULL(SUM(CASE WHEN Flag=0 AND Quantity<0 THEN -Quantity END),0),
Balance=ISNULL((Select SUM(CASE WHEN Flag=1 THEN Quantity ELSE -Quantity END)
FROM tb Where Item=a.Item AND Date<=MAX(a.Date)),0)
FROM tb a
Where Date>=@dt1 AND Date<DATEADD(Day,1,@dt2)
GROUP BY CONVERT(char(10),Date,120),Item
orDER BY Item,Date
/*--结果
Item    Date       Opening    IN     IN_Retrun   OUT   OUT_Return   Balance 
---------- ---------------- -------------- ----------- ---------------- ----------- ------------------- ----------- 
aa     2005-02-01   100      180     0           55      0            225
aa     2005-02-02   225      200     10          0       0            415
aa     2005-02-03   415      0       0           0       5            420
bb     2005-02-02   0        95      0           0       0            95
bb     2005-02-03   95       0       0           65      0            30
bb     2005-02-05   30       0       15          0       20           35
bb     2005-02-07   35       100     0           0       0            135
cc     2005-02-01   100       0      0           0       0            100
--*/


Access软件网交流QQ群(群号:198465573)
 
 相关文章
论库存控制与数据准确性问题(转)  【e-works  2011/8/12】
药品库存管理软件  【马德良  2012/2/22】
《仓库收发货及库存作业管理系统》我的ACCESS+SQL serv...  【李振兴  2012/10/22】
简单的库存管理  【落尘  2012/1/4】
库存管理中转仓单查询示例  【沧海桑田  2013/12/13】
MRO库存管理系统  【大地星路  2016/4/23】
《库存管理软件》从零基础学习软件开发,自己学习的一点点心得  【飘零  2016/6/30】
一句代码实现库存管理  【gzxls  2018/3/8】
常见问答
技术分类
相关资源
文章搜索
关于作者

萤火虫

文章分类

文章存档

友情链接