1

我有一个 Sqlite 数据库,其中包含一个包含金融交易的表。相关列是日期、采购订单编号以及借方和贷方金额。我需要显示这些交易并根据任意起始余额(始终是第一条记录)计算运行总额。

我基于此查询创建了一个视图:

SELECT t1.[ID], t1.[Date], t1.[PO], t1.[Debit], t1.[Credit],
       ( SELECT SUM( t2.[Credit] ) - SUM ( t2.[Debit] ) 
         FROM [Transaction] t2 
         WHERE t2.[ID] <= t1.[ID] ) AS [Balance]
FROM   [Transaction] t1

它有效。问题是,有时我需要按日期和/或 PO# 排序,而当我这样做时,虽然 Balance 列的值是正确的,但它是无序的。另外,我需要按日期过滤,所以我不相信我可以在事务表中使用计算列。

我已经研究过使用该ROWID值,但没有变化。据我所知,Sqlite 不支持ROW_NUMBER() OVER(). 我花了几天时间试图解决这个问题,但没有运气。

这是一个 .NET Compact Framework 应用程序,Sqlite ADO.NET 版本 1.0.66(不确定 Sqlite 引擎的版本)。

4

1 回答 1

1

解决方案确实是在表中添加一个 Balance 字段,并在添加/编辑/删除记录时通过触发器对其进行更新。事实证明,我真正的问题不是如何计算总计,而是做我想做的事情的最佳实践,这是 MPelletier 建议的银行家数据库。我在这个线程中找到了我需要的触发器示例,稍加调整,我就可以做我需要的事情。因此,我不再需要该视图,因为它的唯一目的是计算总和。

于 2011-03-02T17:48:46.440 回答