SQL SERVER 2000数据库
dj_head 是单头表(bh是单据编号,fhck是仓库编号)
xsd 是单身表(djbh是单据编号,bh是商品编号,sl是数量,sl2是库存余量)
spfb 是基数表 (kcsp_bh 是商品编号,chck_bh是仓库编号,sl是基数)假如基数表数据为:
kcsp_bh chck_bh sl
是商品编号 仓库编号 基数
0000000003 001 600
0000000003 002 1000假如 dj_head 表和 xsd 表联合查询得到的结果如下:
fhck bh sl sl2
仓库编号 商品编号 数量 库存余量
001 0000000003 2 0
001 0000000003 4 0
002 0000000003 10 0
002 0000000003 5 0
002 0000000003 1 0每个仓库都有个数量基数(基数在另一个表里),所以上面查询出来的库存余量为0,那么我们要得到库存余量,
怎么得到,规律就是:
同一仓库的第一条先加仓库的数量基数,然后同仓库的下一条数据的库存余量加上一条数据的库存余量,依次类推,不同仓库的不加,不同仓库的另外做为一组自己加现在想把这些结果和 spfb 表联合查询,并得到结果如下:
fhck bh sl sl2
仓库编号字段 商品编号字段 数量字段 库存余量
001 0000000003 2 602
001 0000000003 4 606
002 0000000003 10 1010
002 0000000003 5 1015
002 0000000003 1 1016
dj_head 是单头表(bh是单据编号,fhck是仓库编号)
xsd 是单身表(djbh是单据编号,bh是商品编号,sl是数量,sl2是库存余量)
spfb 是基数表 (kcsp_bh 是商品编号,chck_bh是仓库编号,sl是基数)假如基数表数据为:
kcsp_bh chck_bh sl
是商品编号 仓库编号 基数
0000000003 001 600
0000000003 002 1000假如 dj_head 表和 xsd 表联合查询得到的结果如下:
fhck bh sl sl2
仓库编号 商品编号 数量 库存余量
001 0000000003 2 0
001 0000000003 4 0
002 0000000003 10 0
002 0000000003 5 0
002 0000000003 1 0每个仓库都有个数量基数(基数在另一个表里),所以上面查询出来的库存余量为0,那么我们要得到库存余量,
怎么得到,规律就是:
同一仓库的第一条先加仓库的数量基数,然后同仓库的下一条数据的库存余量加上一条数据的库存余量,依次类推,不同仓库的不加,不同仓库的另外做为一组自己加现在想把这些结果和 spfb 表联合查询,并得到结果如下:
fhck bh sl sl2
仓库编号字段 商品编号字段 数量字段 库存余量
001 0000000003 2 602
001 0000000003 4 606
002 0000000003 10 1010
002 0000000003 5 1015
002 0000000003 1 1016
from dj_head ,
(select xsd.sl2+spfb.sl as 库存余量,xsd.sl as 数量字段,xsd.bh as 商品编号,xsd.djbh as 单据编号
from xsd,spfb where xsd.bh=spfb.kcsp_bh) as b
where a.bh = b.单据编号
上一次写错了,少了一个as a,下边的应该可以运行
select a.fhck,b.*
from dj_head as a ,
(select xsd.sl2+spfb.sl as 库存余量,xsd.sl as 数量字段,xsd.bh as 商品编号,xsd.djbh as 单据编号
from xsd,spfb where xsd.bh=spfb.kcsp_bh) as b
where a.bh = b.单据编号
CREATE TABLE Data
(
kcsp_bh varchar(15), chck_bh varchar(15), sl numeric(12,2))
--是商品编号 仓库编号 基数
INSERT INTO data
SELECT '0000000003', '001', 600 UNION ALL
SELECT '0000000003', '002', 1000CREATE TABLE xsd
--仓库编号 商品编号 数量 库存余量
(ID INT IDENTITY(1,1),chck_bh varchar(15),kcsp_bh varchar(15),Qty numeric(12,2),Blance numeric(12,2))
INSERT INTO xsd
SELECT '001', '0000000003', 2, 0 UNION ALL
SELECT '001', '0000000003', 4, 0 UNION ALL
SELECT '002', '0000000003', 10, 0 UNION ALL
SELECT '002', '0000000003', 5, 0 UNION ALL
SELECT '002', '0000000003', 1, 0UPDATE xsd
SET blance=B.sl+
(SELECT SUM(Qty) FROM xsd WHERE A.kcsp_bh=kcsp_bh AND A.chck_bh=chck_bh AND ID<=A.ID)
FROM xsd A LEFT JOIN data B
ON A.kcsp_bh=B.kcsp_bh AND A.chck_bh=B.chck_bhSELECT * FROM xsd/*
ID chck_bh kcsp_bh Qty Blance
----------- --------------- --------------- -------------- --------------
1 001 0000000003 2.00 602.00
2 001 0000000003 4.00 606.00
3 002 0000000003 10.00 1010.00
4 002 0000000003 5.00 1015.00
5 002 0000000003 1.00 1016.00(所影响的行数为 5 行)
*/DROP TABLE data,xsd
CREATE TABLE dj_head
(bh varchar(15),fhck varchar(15))
INSERT INTO dj_head
SELECT '0000000003','001' UNION ALL
SELECT '0000000003','002'CREATE TABLE spfb
(
kcsp_bh varchar(15), chck_bh varchar(15), sl numeric(12,2))
INSERT INTO spfb
SELECT '0000000003', '001', 600 UNION ALL
SELECT '0000000003', '002', 1000CREATE TABLE xsd
(ID INT IDENTITY(1,1),djbh varchar(15),bh varchar(15),sl numeric(12,2),sl2 numeric(12,2))
INSERT INTO xsd
SELECT '001', '0000000003', 2, 0 UNION ALL
SELECT '001', '0000000003', 4, 0 UNION ALL
SELECT '002', '0000000003', 10, 0 UNION ALL
SELECT '002', '0000000003', 5, 0 UNION ALL
SELECT '002', '0000000003', 1, 0
select a.ID,A.djbh,A.bh,A.sl,A.sl2,
B.sl+(select SUM(sl) from xsd
where A.bh=kcsp_bh AND A.djbh=chck_bh AND ID<=A.ID and djbh=A.djbh) as t
from xsd A LEFT JOIN spfb B
on A.bh=B.kcsp_bh AND A.djbh=B.chck_bh
/*
ID djbh bh sl sl2 t
----------- --------------- --------------- --------------------------------------- --------------------------------------- ---------------------------------------
1 001 0000000003 2.00 0.00 602.00
2 001 0000000003 4.00 0.00 606.00
3 002 0000000003 10.00 0.00 1010.00
4 002 0000000003 5.00 0.00 1015.00
5 002 0000000003 1.00 0.00 1016.00(5 個資料列受到影響)
*//*
drop table xsd
drop table spfb
drop table dj_head
*/
经测试:
8楼测试OK,附合LZ联合查询的结果。。
7楼用update,且少了dj_head表,并整合到新Data表中,update结果正确,太貌似不符合联合查询
4楼鸟人在乱讲
where A.bh=kcsp_bh AND A.djbh=chck_bh中的 A.djbh=chck_bh错误,A.djbh是单据编号,chck_bh是存货仓库编号,怎么能等呢?
CREATE TABLE spfb
(
kcsp_bh varchar(15), chck_bh varchar(15), sl numeric(12,2))
INSERT INTO spfb
SELECT '0000000003', '001', 600 UNION ALL
SELECT '0000000003', '002', 1000CREATE TABLE xsd
(ID INT IDENTITY(1,1),djbh varchar(15),bh varchar(15),sl numeric(12,2),sl2 numeric(12,2))
INSERT INTO xsd
SELECT '001', '0000000003', 2, 0 UNION ALL
SELECT '001', '0000000003', 4, 0 UNION ALL
SELECT '002', '0000000003', 10, 0 UNION ALL
SELECT '002', '0000000003', 5, 0 UNION ALL
SELECT '002', '0000000003', 1, 0