有个销售订单表(表名sale),如下
销售单据编号行号 物料名称 销售数量
S20160011
电脑 10
S20160012 复印机30
采购表结构(表名pur)
采购单据编号行号物料名称 采购数量原销售单据号原销售行号
sale和pur的关系为 pur.原销售单据号=sale.销售单据编号and pur.原销售行号=sale.行号
下面是几种要求的查询结果
1.没有采购的时候查询结果如下
物料名称 销售数量 采购数量 未采购数量
电脑
10
0
10
复印机
30
0
30
2.电脑采购10台
采购表结构(表名pur)
采购单据编号行号物料名称 采购数量原销售单据号原销售行号
P001
1电脑
10 S2016001
1
欲查询结果如下
物料名称 销售数量 采购数量 未采购数量
电脑
10
10
0
复印机
30
0 3
3.电脑有时候会多采购几次,比如这次再采购2台,采购表变成如下
采购单据编号行号物料名称 采购数量原销售单据号原销售行号
P001
1电脑
10S2016001 1
P002
1电脑
2 S2016001 1
查询结果要求
物料名称 销售数量 采购数量 未采购数量
电脑
10
10
0
电脑
0
2
-2
复印机
3
0
3
4.电脑再次采购9台,采购表变成如下,
采购单据编号行号物料名称 采购数量原销售单据号原销售行号
P001
1电脑
10S20160011
P002
1电脑
2 S2016001 1
P003
1电脑
9 S2016001 1
查询结果要求
物料名称 销售数量 采购数量 未采购数量
电脑
10
10
0
电脑
0
2
-2
电脑
-2
9
-11
复印机
3
0
3
5.电脑采购再次1台,打印机采购5台,采购表如下
采购单据编号行号物料名称 采购数量原销售单据号原销售行号
P001
1电脑
10S20160011
P002
1电脑
2 S20160011
P003
1电脑
9 S20160011
P004
1电脑
1 S20160011
P004
2复印机
5 S20160012
红色的这两行是同一个采购单号。
查询结果要求
物料名称 销售数量 采购数量 未采购数量
电脑
10
10
0
电脑
0
2
-2
电脑
-2
9
-11
电脑
-11 1
-12
复印机
3
5
-2
6.假如用户删除了第一张采购单P001
那么采购表变为
采购单据编号行号物料名称 采购数量原销售单据号原销售行号
P002
1电脑
2 S20160011
P003
1电脑
9 S20160011
P004
1电脑
1 S20160011
P004
2复印机
5 S20160012
查询结果要求
物料名称 销售数量 采购数量 未采购数量
电脑
10
2
8
电脑
8
9
-1
电脑
-1
1
-2
复印机
3
5
-2
以此类推,每个物料第一行未采购数量是第二行的销售数量。请大家给个解决方法
上面两表结构和数据在下面
if not object_id(N'Tempdb..sale') is nulldrop table sale
Create table sale(sbillno nvarchar(160),slineno int,wl_name nvarchar(260),fsale_qty decimal(23,10))
insert into sale
select 'S2016001',1,'电脑',10union all
select 'S2016001',2,'复印机',30
if not object_id(N'Tempdb..pur') is nulldrop table pur
Create table pur(Pbillno nvarchar(160),flineno int,wl_name nvarchar(260),fpur_qty decimal(23,10),sbillno nvarchar(160),slineno int)
Insert pur
select 'P001',1,'电脑',10,'S2016001',1 union all
select 'P002',1,'电脑',2,'S2016001',1 union all
select 'P003',1,'电脑',9,'S2016001',1 union all
select 'P004',1,'电脑',1,'S2016001',1 union all
select 'P004',2,'复印机',5,'S2016001',2
Go
|