需要在Sqlite数据库中运行总计

时间:2011-03-01 14:42:33

标签: sqlite compact-framework system.data.sqlite

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

我根据此查询创建了一个视图:

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列值正确时,它就会出现故障。另外,我需要按日期过滤,所以我不相信我可以在Transaction表中使用计算列。

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

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

1 个答案:

答案 0 :(得分:1)

解决方案确实是向表中添加一个Balance字段,并在添加/编辑/删除记录时通过触发器更新它。事实证明,我真正的问题不是如何做一个总计,而是做我想做的最佳实践,这是MPelletier建议的银行家数据库。我在this thread找到了我需要的触发器的例子,经过一些调整,我得做我需要的事情。因此,我不再需要视图,因为它的唯一目的是运行总计。