一尘不染

从行和列计算问题(将两列与另一行的第三列相加)

sql

SELECT AcctId,Date,
Sum(CASE
WHEN DC = ‘C’ THEN TrnAmt
ELSE 0
END) AS C,
Sum(CASE
WHEN DC = ‘D’ THEN TrnAmt
ELSE 0
END) AS D
FROM Table1 where AcctId = ‘51’
GROUP BY AcctId,Date
ORDER BY AcctId,Date

我执行了上面的查询,并得到了我想要的结果。

  AcctId       Date         C        D
    51       2012-12-04   15000      0
    51       2012-12-05   150000  160596
    51       2012-12-06    600        0

现在我要对同一查询执行另一个操作,即

我需要这样的结果

  AcctId   Date                                Result

    51       2012-12-04    (15000-0)->       15000  
    51       2012-12-05   (150000-160596) + (15000->The first value)  4404
    51       2012-12-06     600-0         +(4404 ->The calculated 2nd value) 5004

有可能使用相同的查询吗?


阅读 232

收藏
2021-03-08

共1个答案

一尘不染

使用递归CTE

;WITH cte AS
 (
  SELECT AcctId, Date,
     Sum(CASE
           WHEN DC = 'C' THEN TrnAmt
           ELSE 0
         END) AS C,
     Sum(CASE
           WHEN DC = 'D' THEN TrnAmt
           ELSE 0
         END) AS D,
     ROW_NUMBER() OVER (ORDER BY AcctId, Date) AS Id 
  FROM   Table1 where AcctId = '51'
  GROUP  BY AcctId, Date
  ), cte2 AS
 (
  SELECT Id, AcctId, Date, C, D, (C - 0) AS Result
  FROM cte
  WHERE Id = 1
  UNION ALL
  SELECT c.Id, c.AcctId, c.Date, c.C, c.D, (c.C - c.D) + ct.Result
  FROM cte c JOIN cte2 ct ON c.Id = ct.Id + 1
  )
  SELECT *
  FROM cte2

SQLFiddle上的 简单示例
****

2021-03-08