USE test
GO
-->生成表A
if object_id('A') is not null
drop table A
Go
Create table A([PO] nvarchar(4),[LOT] nvarchar(1),[Item] datetime,[VEND] nvarchar(4),[QTY] smallint,[UNIT] nvarchar(3),[DATE] datetime)
Insert into A
Select N'P001',N'A','4711',N'V001',1000,N'PCS','2012/12/12'
-->生成表B
if object_id('B') is not null
drop table B
Go
Create table B([GRN] nvarchar(4),[PO] nvarchar(4),[LOT] nvarchar(1),[Item] datetime,[VEND] nvarchar(4),[QTY1] smallint,[UNIT] nvarchar(3),[DATE1] datetime)
Insert into B
Select N'G001',N'P001',N'A','4711',N'V001',400,N'PCS','2013/01/07'
Union all Select N'G003',N'P001',N'A','4711',N'V001',220,N'PCS','2013/01/17'
select
B.GRN
,B.PO
,B.LOT
,B.Item
,B.VEND
,B.QTY1
,B.UNIT
,B.DATE1
,A.QTY-ISNULL(SUM(o.QTY1),0) AS BAL
from A
INNER JOIN B ON A.PO=B.PO
LEFT JOIN B AS o ON B.PO=o.PO AND B.DATE1>=o.DATE1
GROUP BY
B.GRN
,B.PO
,B.LOT
,B.Item
,B.VEND
,B.QTY1
,B.UNIT
,B.DATE1
,A.QTY
/*
GRN PO LOT Item VEND QTY1 UNIT DATE1 BAL
---- ---- ---- ----------------------- ---- ------ ---- ----------------------- -----------
G001 P001 A 4711-01-01 00:00:00.000 V001 400 PCS 2013-01-07 00:00:00.000 600
G003 P001 A 4711-01-01 00:00:00.000 V001 220 PCS 2013-01-17 00:00:00.000 380
*/