This is my previous thread
sql-running-total-query.html
Continue to the above query ...
PO Table
CREATE TABLE [dbo].PO ON [PRIMARY]
GO
PO Insert
GO
SET IDENTITY_INSERT [dbo].[PO] ON
INSERT [dbo].[PO] ([ID], [PONO], [ItemName], [Color], [POQty]) VALUES (1, N'K1', N'A1', N'C1', 5240)
INSERT [dbo].[PO] ([ID], [PONO], [ItemName], [Color], [POQty]) VALUES (2, N'K2', N'A1', N'C1', 393)
INSERT [dbo].[PO] ([ID], [PONO], [ItemName], [Color], [POQty]) VALUES (3, N'K3', N'A1', N'C1', 4847)
INSERT [dbo].[PO] ([ID], [PONO], [ItemName], [Color], [POQty]) VALUES (4, N'K4', N'A3', N'C3', 2968)
INSERT [dbo].[PO] ([ID], [PONO], [ItemName], [Color], [POQty]) VALUES (5, N'K5', N'A4', N'C4', 3224)
SET IDENTITY_INSERT [dbo].[PO] OFF
DC Table
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[DC](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ItemName] [nvarchar](10) NULL,
[Color] [nvarchar](10) NULL,
[DCQty] [float] NULL,
CONSTRAINT [PK_DCQty] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
DC Insert
GO
SET IDENTITY_INSERT [dbo].[DC] ON
INSERT [dbo].[DC] ([ID], [ItemName], [Color], [DCQty]) VALUES (1, N'A1', N'C1', 9500)
SET IDENTITY_INSERT [dbo].[DC] OFF
I got solution from forum
;with cte as
( Select A.PONO,A.ItemName,A.Color,A.POQty,CASE WHEN RN=1 THEN CASE WHEN POQty>B.DCQty THEN B.DCQty ELSE POQty END ELSE 0 end DCQty,CASE WHEN RN=1 THEN b.DCQty ELSE 0 END DCQty1
FROM
(
Select ROW_NUMBER() OVER ( PARTITION BY ItemName,Color ORDER BY PONO ) RN,PONO,ItemName,Color,POQty FROM [PO] ) A
LEFT JOIN [DC] B On A.ItemName=B.ItemName AND A.Color=B.Color
Where A.ItemName='A1' and A.Color='C1'
)
,cte1 as ( Select PONO,ItemName,Color,POQty,ISNULL(lag(DCQty1-DCQty) OVER ( PARTITION BY ItemName,Color Order By PONO ),DCQty ) DCQty from cte )
Select * FROM ( Select PONO,ItemName,Color,POQty,DCQty,POQty-DCQty POBalQty FROM cte1 Where DCQty>0 ) a
This works fine for the first PO DC Qty. But for 2nd PO K2 has 393 Qty. But in DC it has taken balance all remaining DC Qty.
This is the output i am getting which has wrong POQty is less than DC Qty in 2nd row if so then it should take 3rd PO
PONO ItemName Color POQty DCQty POBalQty
K1 A1 C1 5240 5240 0
K2 A1 C1 393 4260 -3867