Sql server 2008 r2 如何创建存储过程以从数据库获取期初余额到日期范围水晶报表

Sql server 2008 r2 如何创建存储过程以从数据库获取期初余额到日期范围水晶报表,sql-server-2008-r2,crystal-reports,Sql Server 2008 R2,Crystal Reports,我有一个带有借方和贷方栏的数据库。我已经从这个数据库中创建了一个crystal报告,作为日期范围报告,并使用余额公式添加了一个新列。现在,我需要一行来将前一天的余额从数据库获取到我的报表。对于此选项,我需要创建一个自定义存储过程。有人能帮我解决这个问题吗?一般来说,我建议您不要使用Crystal来扩展数据库中的数据,添加列、公式等。根据我的经验,Crystal脚本很麻烦、不易察觉,而且很难维护。因此,我建议您尽可能通过视图使用SQL创建和扩展数据模型,并将这些视图用作Crystal报表的数据源

我有一个带有借方和贷方栏的数据库。我已经从这个数据库中创建了一个crystal报告,作为日期范围报告,并使用余额公式添加了一个新列。现在,我需要一行来将前一天的余额从数据库获取到我的报表。对于此选项,我需要创建一个自定义存储过程。有人能帮我解决这个问题吗?

一般来说,我建议您不要使用Crystal来扩展数据库中的数据,添加列、公式等。根据我的经验,Crystal脚本很麻烦、不易察觉,而且很难维护。因此,我建议您尽可能通过视图使用SQL创建和扩展数据模型,并将这些视图用作Crystal报表的数据源

对于您的具体情况,例如,如果您有一个包含debit和credit列的表,并且需要使用额外的列余额和先前的_余额扩展数据,那么解决方案可能如下所示:

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

检查

为此创建SP似乎有点奇怪或过度。。。请您再解释一下这一点好吗?正如您在结果中所显示的,我需要在报告的第一行存储上一个余额行和结转余额。我试过公式,但它不起作用。我只需要三列,如结果贷方、借方和余额列所示。如果我过滤2014-12-05的上述结果,第一行将显示-340.00。这就像银行对账单,但报表的第一行如何存储以前的余额?在第一排之前什么都不可能。。。不管怎样,我想不出你的问题