Insert Into Select mit LAG SQL server

Ich habe eine Temp-Tabelle mit einigen data und ich möchte diese data von temp-Tabelle in meine DB-Tabelle insert, aber wollte einige data basierend auf dem vorherigen datasatz in der DB-Tabelle zu aktualisieren.

Temp Tischstruktur:

create table #tab (Amount decimal(18,2)) insert into #tab values(100),(200),(300) 

DB Tabellenstruktur:

 CREATE TABLE [dbo].[Account]( [Id] [int] IDENTITY(1,1) NOT NULL, [OpeningBalance] [decimal](18, 2) NULL, [Amount] [decimal](18, 2) NULL, [ClosingBalance] [decimal](18, 2) NULL, CONSTRAINT [PK_Account] 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 

Ich brauche eine Frage wie:

 insert into Account ( OpeningBalance, Amount, ClosingBalance) select LAG(ClosingAmount from Account) Over(order by id), Amount, LAG(ClosingAmount from Account) Over(order by id)+Amount from #tab 

Ich denke, das ist das, was du versuchst zu erreichen … Es geht davon aus, dass du die #tab-Werte in der Reihenfolge der Menge (kleinste bis größte) einsetzt.

Sehen Sie, ob das nahe kommt …

 INSERT dbo.Account (OpeningBalance, Amount, ClosingBalance) SELECT ob.OpeningBalance + ISNULL(SUM(t.Amount) OVER (ORDER BY t.Amount ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING), 0) t.Amount, ob.OpeningBalance + SUM(t.Amount) OVER (ORDER BY t.Amount ROWS UNBOUNDED PRECEDING) FROM #tab t CROSS JOIN ( SELECT TOP 1 OpeningBalance = a.ClosingBalance FROM dbo.Account a ORDER BY a.Id DESC ) ob;