我有一个使用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。
答案 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
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
您可以使用 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