我希望使用SQL在前12个月末找到帐户的期末帐户余额

时间:2015-10-29 23:06:48

标签: sql-server

我只有交易信息。

我正在试图弄清楚如何编写一个查询,让我找到动态变化的帐户列表中前两个月的结束余额(最好是11个)。

我想到的方式,但我不确定如何执行将是:

SELECT AcctName, CurrTotal - SUM(transactions from the last two months), 
          CurrTotal - SUM(transactions from the last month), CurrTotal;

问题是我不知道如何仅请求这些特定交易的总和。 (部分原因是我不知道如何在SQL中找到当前日期,这样会有所帮助)

例如,我有一个会计科目表,其中信息包括“AcctName”和“CurrTotal”。我有另一个日记帐分录表,其中包括日记帐分录的数量,条目的日期,以及是信用卡还是借记卡。

AcctName    CurrTotal
Checking    45,325
Savings     -65,213
Petty Cash  213,123


EntryID             Amount       Account     Date         Credit/Debit
1                   1,234        Checking    10/15/15     Debit      
2                   15,235       Savings     10/4/15      Credit
3                   32,134       Checking    9/30/15      Debit 
4                   145,111      Savings     9/28/15      Credit
5                   16,234       Savings     9/25/15      Debit
6                   1,000        Petty Cash  9/14/15      Debit
7                   2,532        Checking    9/1/15       Debit
8                   43,213       Savings     8/22/15      Credit
9                   100,323      Checking    8/14/15      Debit

预期交易

             AUG        SEPT       OCT
Checking    -90,898    9,425      45,325
Savings     122,112    78,899     -65,213
Petty Cash  212,123    213,123    213,123

1 个答案:

答案 0 :(得分:0)

您可以使用条件聚合:

DECLARE @last_two_months DATE = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 2, 0)
DECLARE @last_month DATE = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0)

SELECT
    coa.AcctName,
    coa.CurrTotal - SUM(CASE WHEN je.Date >= @last_two_months THEN je.Amount ELSE 0 END) AS [AUG],
    coa.CurrTotal - SUM(CASE WHEN je.Date >= @last_month THEN je.Amount ELSE 0 END) AS [SEPT],
    coa.CurrTotal AS [OCT]
FROM ChartOfAccounts coa
INNER JOIN JournalEntries je
    ON je.Account = coa.AcctName
GROUP BY
    coa.AcctName, coa.CurrTotal

Some common date routines