【问题标题】:how to calculate all previous datas sum of a sql column on a date range report如何计算日期范围报告中sql列的所有先前数据总和
【发布时间】:2015-01-06 18:36:19
【问题描述】:

我有一个使用 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 年 7 月 1 日开始,那么我需要 2014 年 7 月 1 日之前所有先前数据的总和(借方 - 贷方))。谁能帮我找到解决方案。最主要的是在第一行使用 sql 命令添加结转余额。如果为空,则应为 0.00。

【问题讨论】:

  • sum_date &lt; sum_date 总是假的。
  • @HamletHakobyan 然后改变它
  • sum_date 由什么组成?
  • 有什么办法可以改变这个@HamletHakobyan
  • @Siva 数据库日期列名

标签: sql-server crystal-reports


【解决方案1】:

这是您的示例表

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

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

查询 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

查询 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 列中获得截至前一天的期初余额。 如有任何更改,请留言或评论。

【讨论】:

  • 无法声明日期,因为我需要报告开始日期之前的总和。例如,如果是 2014 年 11 月 29 日,那么我需要在此日期之前的所有先前总和,如果它将是 30 日,那么它将是不同的金额,在我的报告日期字段名称中作为 sum_date 有没有办法编写代码这个字段
【解决方案2】:

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

您的 where 子句 where sum_date &lt; sum_date 不会以这种方式工作,要么您更改查询中的右侧比较运算符,要么在水晶中创建一个参数,以便用户可以在运行时输入所需的 end date

选项 1:

E.g: where sum_date < currentdate

选项 2:

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

where sum_date < 2014-07-01

【讨论】:

    【解决方案3】:

    你可以试试这个:-

    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)
    

    【讨论】:

    • nop 它不工作的错误消息:无法从数据库中检索数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多