大家好
我现在有一张表PDRCTable
id 单号 性质 料号 数量 仓库名称 类别 制作人 制作日期
1 MR2010120001 原材料入库 A 1.00 电气仓 入库 admin 2010-12-21
2 MR2010120001 原材料入库 B 2.00 电气仓 入库 admin 2010-12-21
3 MR2010120002 贸易品入库 C 3.00 贸易仓 入库 admin 2010-12-25
4 MR2010120002 贸易品入库 D 3.00 贸易仓 入库 admin 2010-12-25
5 MR2010120003 原材料入库 E 1.00 机械仓 入库 admin 2010-12-26
6 MR2010120003 原材料入库 F 1.00 机械仓 入库 admin 2010-12-26
7 MR2010120003 原材料入库 B 2.00 机械仓 入库 admin 2010-12-26
8 PC2010120001 贸易品出库 C 3.00 贸易仓 出库 admin 2010-12-26
9 PC2010120002 贸易品出库 D 2.00 贸易仓 出库 admin 2010-12-26
10 PC2010120003 原材料出库 A 1.00 电气仓 出库 admin 2010-12-26
11 PC2010120003 原材料出库 B 1.00 电气仓 出库 admin 2010-12-26
还有一张表PDTable
id 单号 料号 实盘数量 仓库名称 制作人 制作日期
33 PD2010120011 R 2.00 贸易仓 admin 2010-12-24
34 PD2010120011 A 2.00 贸易仓 admin 2010-12-24
35 PD2010120011 B 6.00 贸易仓 admin 2010-12-24
36 PD2010120012 C 3.00 维修仓 admin 2010-12-24
37 PD2010120012 D 3.00 维修仓 admin 2010-12-24
38 PD2010120012 E 35.00 维修仓 admin 2010-12-24
39 PD2010120012 F 1.00 维修仓 admin 2010-12-24
40 PD2010120012 G 3.00 维修仓 admin 2010-12-24
41 PD2010120013 Q 2.00 其它仓 admin 2010-12-24
42 PD2010120009 W 1.00 电气仓 admin 2010-12-24
43 PD2010120009 Y 1.00 电气仓 admin 2010-12-24
44 PD2010120009 P 1.00 电气仓 admin 2010-12-24
45 PD2010120009 M 1.00 电气仓 admin 2010-12-24我想要得到按照不同的仓库为条件,找到对应这个仓库的盘点单的对应的制作日期之后的出入库情况,然后按照不同的仓库进行盘点。也就是上期盘点+盘点之后的入库-盘点之后的出库,最终得到以下的效果:
R 2.00 贸易仓
A 2.00 贸易仓
B 6.00 贸易仓
D 1.00 贸易仓
C 3.00 维修仓
D 3.00 维修仓
E 35.00 维修仓
F 1.00 维修仓
G 3.00 维修仓
Q 2.00 其它仓
W 1.00 电气仓
Y 1.00 电气仓
P 1.00 电气仓
M 1.00 电气仓
A 1.00 电气仓
E 1.00 机械仓
F 1.00 机械仓
B 2.00 机械仓 不用存储过程,需要最后得到一张视图,这个应该怎么实现呢?
我现在有一张表PDRCTable
id 单号 性质 料号 数量 仓库名称 类别 制作人 制作日期
1 MR2010120001 原材料入库 A 1.00 电气仓 入库 admin 2010-12-21
2 MR2010120001 原材料入库 B 2.00 电气仓 入库 admin 2010-12-21
3 MR2010120002 贸易品入库 C 3.00 贸易仓 入库 admin 2010-12-25
4 MR2010120002 贸易品入库 D 3.00 贸易仓 入库 admin 2010-12-25
5 MR2010120003 原材料入库 E 1.00 机械仓 入库 admin 2010-12-26
6 MR2010120003 原材料入库 F 1.00 机械仓 入库 admin 2010-12-26
7 MR2010120003 原材料入库 B 2.00 机械仓 入库 admin 2010-12-26
8 PC2010120001 贸易品出库 C 3.00 贸易仓 出库 admin 2010-12-26
9 PC2010120002 贸易品出库 D 2.00 贸易仓 出库 admin 2010-12-26
10 PC2010120003 原材料出库 A 1.00 电气仓 出库 admin 2010-12-26
11 PC2010120003 原材料出库 B 1.00 电气仓 出库 admin 2010-12-26
还有一张表PDTable
id 单号 料号 实盘数量 仓库名称 制作人 制作日期
33 PD2010120011 R 2.00 贸易仓 admin 2010-12-24
34 PD2010120011 A 2.00 贸易仓 admin 2010-12-24
35 PD2010120011 B 6.00 贸易仓 admin 2010-12-24
36 PD2010120012 C 3.00 维修仓 admin 2010-12-24
37 PD2010120012 D 3.00 维修仓 admin 2010-12-24
38 PD2010120012 E 35.00 维修仓 admin 2010-12-24
39 PD2010120012 F 1.00 维修仓 admin 2010-12-24
40 PD2010120012 G 3.00 维修仓 admin 2010-12-24
41 PD2010120013 Q 2.00 其它仓 admin 2010-12-24
42 PD2010120009 W 1.00 电气仓 admin 2010-12-24
43 PD2010120009 Y 1.00 电气仓 admin 2010-12-24
44 PD2010120009 P 1.00 电气仓 admin 2010-12-24
45 PD2010120009 M 1.00 电气仓 admin 2010-12-24我想要得到按照不同的仓库为条件,找到对应这个仓库的盘点单的对应的制作日期之后的出入库情况,然后按照不同的仓库进行盘点。也就是上期盘点+盘点之后的入库-盘点之后的出库,最终得到以下的效果:
R 2.00 贸易仓
A 2.00 贸易仓
B 6.00 贸易仓
D 1.00 贸易仓
C 3.00 维修仓
D 3.00 维修仓
E 35.00 维修仓
F 1.00 维修仓
G 3.00 维修仓
Q 2.00 其它仓
W 1.00 电气仓
Y 1.00 电气仓
P 1.00 电气仓
M 1.00 电气仓
A 1.00 电气仓
E 1.00 机械仓
F 1.00 机械仓
B 2.00 机械仓 不用存储过程,需要最后得到一张视图,这个应该怎么实现呢?
select [料号],[仓库名称],
[实盘数量]+(select sum(case when [类别]="入库" then [数量] else 0-[数量] end)
from PDRCTable where pd.[料号]=[料号] and pd.[仓库名称]=[仓库名称] and [制作日期]>pd.[制作日期]) [数量]
from PDTable pd
union all
select [料号],[仓库名称],sum(case when [类别]="入库" then [数量] else 0-[数量] end)
from PDRCTable pdrc
where not exists (select * from PDTable where pdrc.[料号]=[料号] and pdrc.[仓库名称]=[仓库名称])
group by [料号],[仓库名称]
create table PDRCTable(id int,单号 nvarchar(15),性质 nvarchar(10),料号 nvarchar(10),数量 decimal(16,2),仓库名称 nvarchar(10),类别 nvarchar(10),制作人 nvarchar(10),制作日期 datetime)
insert into PDRCTable select 1,'MR2010120001','原材料入库','A',1.00,'电气仓','入库','admin','2010-12-21'
insert into PDRCTable select 2,'MR2010120001','原材料入库','B',2.00,'电气仓','入库','admin','2010-12-21'
insert into PDRCTable select 3,'MR2010120002','贸易品入库','C',3.00,'贸易仓','入库','admin','2010-12-25'
insert into PDRCTable select 4,'MR2010120002','贸易品入库','D',3.00,'贸易仓','入库','admin','2010-12-25'
insert into PDRCTable select 5,'MR2010120003','原材料入库','E',1.00,'机械仓','入库','admin','2010-12-26'
insert into PDRCTable select 6,'MR2010120003','原材料入库','F',1.00,'机械仓','入库','admin','2010-12-26'
insert into PDRCTable select 7,'MR2010120003','原材料入库','B',2.00,'机械仓','入库','admin','2010-12-26'
insert into PDRCTable select 8,'PC2010120001','贸易品出库','C',3.00,'贸易仓','出库','admin','2010-12-26'
insert into PDRCTable select 9,'PC2010120002','贸易品出库','D',2.00,'贸易仓','出库','admin','2010-12-26'
insert into PDRCTable select 10,'PC2010120003','原材料出库','A',1.00,'电气仓','出库','admin','2010-12-26'
insert into PDRCTable select 11,'PC2010120003','原材料出库','B',1.00,'电气仓','出库','admin','2010-12-26'
create table PDTable(id int,单号 nvarchar(15),料号 nvarchar(10),实盘数量 decimal(16,2),仓库名称 nvarchar(10),制作人 nvarchar(10),制作日期 datetime)
insert into PDTable select 33,'PD2010120011','R',2.00,'贸易仓','admin','2010-12-24'
insert into PDTable select 34,'PD2010120011','A',2.00,'贸易仓','admin','2010-12-24'
insert into PDTable select 35,'PD2010120011','B',6.00,'贸易仓','admin','2010-12-24'
insert into PDTable select 36,'PD2010120012','C',3.00,'维修仓','admin','2010-12-24'
insert into PDTable select 37,'PD2010120012','D',3.00,'维修仓','admin','2010-12-24'
insert into PDTable select 38,'PD2010120012','E',35.00,'维修仓','admin','2010-12-24'
insert into PDTable select 39,'PD2010120012','F',1.00,'维修仓','admin','2010-12-24'
insert into PDTable select 40,'PD2010120012','G',3.00,'维修仓','admin','2010-12-24'
insert into PDTable select 41,'PD2010120013','Q',2.00,'其它仓','admin','2010-12-24'
insert into PDTable select 42,'PD2010120009','W',1.00,'电气仓','admin','2010-12-24'
insert into PDTable select 43,'PD2010120009','Y',1.00,'电气仓','admin','2010-12-24'
insert into PDTable select 44,'PD2010120009','P',1.00,'电气仓','admin','2010-12-24'
insert into PDTable select 45,'PD2010120009','M',1.00,'电气仓','admin','2010-12-24'
go
select 料号,
实盘数量=实盘数量+isnull((
select sum((case when 类别='入库' then 数量 else -数量 end)) from PDRCTable where 料号=a.料号 and 仓库名称=a.仓库名称 and 制作日期>a.制作日期
),0),仓库名称 from PDTable a
union all
select 料号,sum((case when 类别='入库' then 数量 else -数量 end))as 实盘数量,仓库名称 from PDRCTable a
where not exists(select 1 from PDTable where 料号=a.料号 and 仓库名称=a.仓库名称)
group by 料号,仓库名称 having sum((case when 类别='入库' then 数量 else -数量 end))<>0
go
drop table PDTable,PDRCTable
/*
料号 实盘数量 仓库名称
---------- --------------------------------------- ----------
R 2.00 贸易仓
A 2.00 贸易仓
B 6.00 贸易仓
C 3.00 维修仓
D 3.00 维修仓
E 35.00 维修仓
F 1.00 维修仓
G 3.00 维修仓
Q 2.00 其它仓
W 1.00 电气仓
Y 1.00 电气仓
P 1.00 电气仓
M 1.00 电气仓
B 1.00 电气仓
B 2.00 机械仓
E 1.00 机械仓
F 1.00 机械仓
D 1.00 贸易仓(18 行受影响)*/对第二个表中没有的,那第一个表中应该不管日期.