如何创建存储过程以从数据库到日期范围晶体报告获得期初余额

时间:2014-12-28 10:28:49

标签: sql-server-2008-r2 crystal-reports

我有一个带借记和贷记列的数据库。我已经从这个数据库中创建了一个水晶报告,作为日期范围报告和使用公式进行平衡添加的新列。现在我需要一行来从数据库到我的报告获得前一天的余额。对于这个选项,我需要创建一个自定义存储过程。任何人都可以帮我解决这个问题

1 个答案:

答案 0 :(得分:0)

一般情况下,我建议您不要使用Crystal扩展数据库中的数据(添加列,公式等)。水晶脚本(根据我的经验)是繁琐,不明显和难以维护的。因此,我建议您尽可能使用SQL - 通过视图创建和扩展数据模型,并将这些视图用作Crystal报表的数据源。

至于您的具体情况,例如,如果您的表格中包含debit列和credit列,则需要使用其他列balanceprevious_balance来扩展您的数据,解决方案可能看起来像这样:

create table your_table (id int, [day] date, credit float, debit float);

insert into your_table (id, [day], credit, debit) values
(1, '2014-12-04', 0.0, 340.00),
(2, '2014-12-05', 10000.0, 0.00),
(3, '2014-12-06', 7666.18, 89.00),
(4, '2014-12-07', 0.0, 990.00);

-- create view dbo.your_table_extension as
select t1.[day]
, t1.credit
, t1.debit
, t1.credit - t1.debit [balance]            --> balance formula
, t2.credit - t2.debit [previous_balance]   --> prev day balance formula
from your_table t1
left join your_table t2 on dateadd(day, -1, t1.[day]) = t2.[day]
  and t1.id != t2.id

结果:

DAY         CREDIT  DEBIT   BALANCE PREVIOUS_BALANCE
----------------------------------------------------
2014-12-04  0       340     -340    (null)
2014-12-05  10000   0       10000   -340
2014-12-06  7666.18 89      7577.18 10000
2014-12-07  0       990     -990    7577.18

检查SQLFiddle