Это должно работать:
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