我在重新计算运行总计时遇到了问题。使用借记贷方和前一行运行总计SQL Server 2012
我有一个重复交易的情况,必须删除这些交易,并且必须根据金额重新计算初始和期末余额,并考虑何时存款。
我的尝试是有嵌套游标(父子)和父母选择所有不同的预订号和孩子计算看起来非常混乱,我没有工作,没有发布,因为我没有想混淆东西。
我知道在SQL Server 2012中,你可以使用(sum over partition by
),但我不明白怎么做了处理删除的行等。
下面是我做的,到目前为止
--Create Table for testing
IF object_id(N'TestTransaction', 'U') IS NOT NULL DROP TABLE TestTransaction
GO
CREATE TABLE [TestTransaction]
(
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[BookingNo] [bigint] NOT NULL,
[IsDebit] [bit] NOT NULL,
[Amount] [decimal](18, 2) NOT NULL,
[InitialBalance] [decimal](18, 2) NOT NULL,
[ClosingBalance] [decimal](18, 2) NOT NULL
) ON [PRIMARY]
GO
INSERT [TestTransaction] ([BookingNo], [IsDebit], [Amount], [InitialBalance], [ClosingBalance])
SELECT 200, 0, 100, 2000,2100 UNION ALL
SELECT 200, 0, 100, 2100,2200 UNION ALL
SELECT 200, 1, 150, 2150,2000 UNION ALL
SELECT 200, 0, 300, 2000,2300 UNION ALL
SELECT 200, 0, 400, 2300,2700 UNION ALL
SELECT 200, 0, 250, 2700,2950 UNION ALL
SELECT 200, 0, 250, 2950,3200
--- end of setup
IF OBJECT_ID('tempdb..#tmpTransToDelete') IS NOT NULL DROP TABLE #tmpTransToDelete
GO
CREATE TABLE #tmpTransToDelete
( BoookingNo bigint,
Isdebit bit,
amount decimal(18,2),
InitialBalance decimal(18,2),
ClosingBalance decimal(18,2)
)
DECLARE @RunnnigInitialBalance decimal(18,2),@RunnnigClosingBalance decimal(18,2)
INSERT #tmpTransToDelete(BoookingNo,Isdebit,amount,InitialBalance,ClosingBalance)
SELECT BookingNo,Isdebit,amount,InitialBalance,ClosingBalance
FROM TestTransaction
WHERE ID IN (1,6)
--Delete all duplicate transaction (just to prove the point)
DELETE TestTransaction WHERE ID IN (1,6)
-- now taking into account the deleted rows recalculate the lot and update the table.
任何帮助?建议?
编辑 结果应该是
Id BookingNo IsDebit Amount InitialBalance ClosingBalance
2 200 0 100.00 2000.00 2000.00
3 200 1 150.00 2000.00 2150.00
4 200 0 300.00 2150.00 2450.00
5 200 0 400.00 2450.00 2850.00
7 200 0 250.00 2600.00 2850.00
Jason APOLOGIES !!!你是正确的样本数据是错误的,我刚刚意识到这一点,因为我正在努力解决这个问题。我消化你的解决方案并回到你身边。无论如何,非常感谢你的回复时间 – developer9969
有什么可说的。我仍然不相信没有游标,这很好。 – developer9969
我可以问你一件事。你认为你的查询可以修改为重新调整Id,例如1-2-3-4等。而不是2-4-等等。明显地比将它移除为标识柱并且更加像LineNo。谢谢。我能想到的唯一方法是回到一个光标,并且您的解决方案非常简洁。感谢 – developer9969