如何计算日期范围报告中sql列的所有先前数据总和

时间:2014-12-31 10:14:14

标签: sql-server crystal-reports

我有一个使用sql命令的借记信用列的水晶报表。此报告包含日期过滤参数。所以问题是如果我过滤报告到日期范围我需要使用sql命令所有以前的数据总和。

Select SUM(CAST(debit as DECIMAL(9,2)))- SUM(CAST(credit as DECIMAL(9,2)))
from sum_balance 
where sum_date < sum_date

这是我的代码,但我无法从中获得结果。 (例如:如果报告从2014-07-01开始,那么我需要2014-07-01之前所有先前数据的总和(借方 - 贷方))。任何人都可以帮我找到解决方案。主要是在第一行使用sql命令添加前提余额。如果它为null则应为0.00。

3 个答案:

答案 0 :(得分:0)

你可以试试这个: -

SELECT SUM(CAST(debit as DECIMAL(9,2)))- SUM(CAST(credit as DECIMAL(9,2)))
FROM sum_balance 
WHERE sum_date < (Select Max(sum_date) FROM sum_balance)

答案 1 :(得分:0)

这是您的示例表

CREATE TABLE #TEMP(DEBIT NUMERIC(20,2),CREDIT NUMERIC(20,2),DT VARCHAR(20))

INSERT INTO #TEMP
SELECT 1000 DEBIT,500 CREDIT,'2014-11-27' DT
UNION ALL
SELECT 2000 DEBIT,700 CREDIT,'2014-11-28' DT
UNION ALL
SELECT 3000 DEBIT,900 CREDIT,'2014-11-29' DT

我正在更新您的更新要求的答案

QUERY 1

这将带来当前总日期,即,2014-11-28金额为(1000+2000)-(500+700)2014-11-29金额将为(1000+2000+3000)-(500+700+900)

SELECT T2.DEBIT,T2.CREDIT,T2.sum_date,
  (SELECT SUM(DEBIT)-SUM(CREDIT) FROM sum_balance WHERE sum_date <= CAST(T2.sum_date AS DATE))
   AMOUNT
FROM sum_balance T2

enter image description here

QUERY 2

这将带来前一天的总和,这将是今天的日期余额,即2014-11-29金额将为(1000+2000)-(500+700)。为了便于理解,我还添加了上一栏。

;WITH CTE AS
(
    SELECT ROW_NUMBER() OVER(ORDER BY CAST(T2.sum_date AS DATE))RNO,
     T2.DEBIT,T2.CREDIT,T2.sum_date,
    ISNULL((SELECT SUM(DEBIT)-SUM(CREDIT) FROM sum_balance WHERE sum_date <= CAST(T2.sum_date AS DATE)),0)
     AMOUNT
    FROM sum_balance T2
)
SELECT C1.*,ISNULL(C2.AMOUNT,0) CARRYFORWARD
FROM CTE C1
LEFT JOIN CTE C2 ON C1.RNO=C2.RNO+1

enter image description here

您可以使用 QUERY 2 ,并在CARRYFORWARD列中获得前一天的期初余额。 如有任何更改,请留言或留言。

答案 2 :(得分:0)

当您需要some date之前的记录时,您需要具有该比较日期,以便可以提取记录。

您的where子句where sum_date < sum_date将不会以这种方式工作,无论是在查询中更改右侧比较运算符还是在crystal中创建参数,以便用户可以在运行时输入所需的end date。 / p>

选项1:

E.g: where sum_date < currentdate

选项2:

创建一个参数并在水晶报表的Record Selection Formula中声明它,以便形成的查询类似于

where sum_date < 2014-07-01