[英]How can I add cumulative sum column?
我使用SqlExpress
以下是用于获取附件结果的查询。
SELECT ReceiptId, Date, Amount, Fine, [Transaction]
FROM (
SELECT ReceiptId, Date, Amount, 'DR' AS [Transaction]
FROM ReceiptCRDR
WHERE (Amount > 0)
UNION ALL
SELECT ReceiptId, Date, Amount, 'CR' AS [Transaction]
FROM ReceiptCR
WHERE (Amount > 0)
UNION ALL
SELECT strInvoiceNo AS ReceiptId, CONVERT(datetime, dtInvoiceDt, 103) AS Date, floatTotal AS Amount, 'DR' AS [Transaction]
FROM tblSellDetails
) AS t
ORDER BY Date
结果
想要一个新的列来显示余额金额。 例如。 1行应显示-2500,第二行应显示-3900,第三行应显示-700,依此类推。
基本上,它需要上一行的“帐户”列的数据并根据交易类型进行计算。
样品结果
好吧,这看起来像SQL-Server
,如果您使用的是2012+,请使用SUM() OVER()
:
SELECT t.*,
SUM(CASE WHEN t.transactionType = 'DR'
THEN t.amount*-1
ELSE t.amount END)
OVER(PARTITION BY t.date ORDER BY t.receiptId,t.TransactionType DESC) as Cumulative_Col
FROM (YourQuery Here) t
这将SUM
CR
的value*-1
和DR
时的value*-1
现在,我按日期分组,这意味着每天都会重新计算此列,如果一直需要,请使用以下内容替换OVER()
:
OVER(ORDER BY t.date,t.receiptId,t.TransactionType DESC) as Cumulative_Col
另外,我不明白为什么在同一日期,因为在CR
之前计算了相同的ReceiptId
DR
,所以我将其添加到订单中,但是如果那不是您想要的,那么请更好地解释逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.