【问题标题】:Data Table Sum Issue数据表总和问题
【发布时间】:2013-06-14 11:13:27
【问题描述】:

我有一个情况。

我有一个包含像这样的贷方和借方列的数据表

Month     Credit     Debit
Sep       1422825      0
Oct         0        1422825
Oct       1695017.5    0
Nov         0         1400000
Nov         0         295018

我想要一个应该像这样显示的余额

Month     Credit     Debit       Balance
Sep       1422825      0
Oct         0        1422825      (1422825 of Credit-1422825 of Debit)=0
Oct       1695017.5    0
Nov         0         1400000     
Nov         0         295018       (1695017.5 of credit-1400000+295018)=0.5

应该在水晶报表上显示怎么做。

【问题讨论】:

  • 请帮我做这件事。
  • 您是否只需要在月底显示余额。与 11 月的情况一样。或者您需要在每一行中显示余额。
  • 这是一个运行值问题。见this。如果您说明 SQL Server 的版本,将会很有帮助。例如,这是2005
  • 我的SQL版本是2008。
  • 对于shekhar,是的,我需要每个月的余额,但在借方之前。

标签: asp.net sql-server ado.net


【解决方案1】:

这是您针对 2005 年优化的解决方案,我相信它在 2008 年运行良好。 (使用整数表示月份,这样更容易......)

DECLARE @Temp TABLE (Month int, Credit money, Debit money, Balance money)

DECLARE @RunningTotal money

SET @RunningTotal = 0

INSERT INTO @Temp
SELECT Month, Credit, Debit, null
FROM Datatable
ORDER BY Month

UPDATE @Temp
SET @RunningTotal = Balance = @RunningTotal + Credit - Debit
FROM @Temp

SELECT * FROM @Temp

编辑(从第一步开始):

如果您只需要显示组(月)中的最后一条记录,那么您可以使用排名功能,例如...

;WITH Temp2 AS
(
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY Month
            ORDER BY Credit DESC, Debit DESC -- whatever order inside group you need
        ) AS N
     FROM @Temp
)
SELECT
    Month,
    Credit, 
    Debit, 
    Balance = CASE WHEN N = 1 THEN Balance ELSE NULL END
FROM Temp2

这是未经测试的,直接从我的脑海中编写的代码:P

【讨论】:

  • 亲爱的 Ozren,谢谢您的回答。这真的很有帮助,但是亲爱的,我不想得到运行总数,而是想要每个月的运行余额。请再次查看我的问题。真的 thnx 上帝保佑你。
  • 您的问题看起来需要所有行,而不是每月一行。如果您每个月需要一行,那么您可以使用 common sum + group by Month。
  • 亲爱的 Ozren,我可以使用 LINQ 吗?
  • Mirza,这不是问题所在,如果还没有被问到,我建议为此打开另一个问题。您可以使用 LINQ 评估运行值,这里有一个解决方案:http://stackoverflow.com/questions/1834753/linq-to-sql-and-a-running-total-on-ordered-results
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 2015-11-28
  • 1970-01-01
相关资源
最近更新 更多