【问题标题】:Generating a basic ledger report in SQL Server在 SQL Server 中生成基本分类帐报告
【发布时间】:2014-09-11 05:05:41
【问题描述】:

我有一个这样的示例帐户交易表:

VchNo   TranDate    Credits     Debits
PR1    07 Dec 2011  10000.50      0.00
PI1    13 Dec 2011  26000.00      0.00
PI2    14 Dec 2011  15841.50      0.00
PR2    15 Dec 2011  9845.25       0.00
PL1    31 Dec 2011     0.00   58741.25
PJ3    02 Jan 2012     0.00    1021.00

我知道这个账户的期初余额

Opening Balance: 99825.00

我希望通过显示上述每笔交易的期初和期末余额来生成这样的基本分类帐报告,如下所示:

VchNo  TranDate     Opening       Credits    Debits   Closing
PR1   07 Dec 2011   99825.00    10000.50      0.00  109825.50
PI1   13 Dec 2011   109825.50   26000.00      0.00  135825.50
PI2   14 Dec 2011   135825.50   15841.50      0.00  151667.00
PR2   15 Dec 2011   151667.00   9845.25       0.00  161512.25
PL1   31 Dec 2011   161512.25      0.00   58741.25  102771.00
PJ3   02 Jan 2012   102771.00      0.00    1021.00  101750.00

在上表中,收盘 = 开盘 + 贷方 - 借方
今天的收盘是次日(次日)的开盘。 在 101750.00 中获得的期末余额(参见 VchNo PJ3 的最后一列)。

我附上了一个示例报告格式以供快速参考。
是否可以使用 SINGLE SQL 查询来实现这一点?

【问题讨论】:

  • 你最初的开场图来自哪里?您仅限使用 SQL Server 2005,还是可以使用更高版本,例如 2008?
  • SQL Server 2005 是我使用的唯一版本。开仓金额可能来自另一个查询,我没有在这里显示。

标签: sql-server-2005 tsql


【解决方案1】:

这应该可行:

CREATE TABLE #Data
(vchno NVARCHAR(6)
,trandate DATETIME
,credits DECIMAL(18,3)
,debits DECIMAL(18,3)
,opening DECIMAL(18,3)
)
INSERT INTO #Data
SELECT 'PR1'as vchno,'07 Dec 2011'as trandate,10000.50 as credits,0.00 as debits,99825 AS opening
UNION ALL SELECT 'PI1' ,'13 Dec 2011' ,  26000.00 ,  0.00,99825  
UNION ALL SELECT 'PI2','14 Dec 2011',  15841.50,  0.00 ,99825
UNION ALL SELECT 'PR2','15 Dec 2011',  9845.25 ,  0.00 ,99825
UNION ALL SELECT 'PL1','31 Dec 2011', 0.00 ,  58741.25 ,99825
UNION ALL SELECT 'PJ3','02 Jan 2012', 0.00,1021.00 ,99825

;With ledger AS
(
SELECT vchno
,trandate
,opening
,credits
,debits
,opening + credits - debits AS closing
,row_number() OVER (ORDER BY trandate) AS row
FROM #data
)
SELECT
l1.vchno
,l1.trandate
,MAX(l1.opening) + ISNULL(SUM(l2.credits),0) - ISNULL(SUM(l2.debits),0) as opening
,MAX(l1.credits) AS issues
,MAX(l1.debits) AS Receips
,MAX(l1.opening) + ISNULL(SUM(l2.credits),0) - ISNULL(SUM(l2.debits),0) + MAX(l1.credits) - MAX(l1.debits) as closing
FROM ledger l1 
LEFT OUTER JOIN ledger l2 on l2.row < l1.row
GROUP BY
l1.vchno
,l1.trandate

【讨论】:

    猜你喜欢
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多