繁体   English   中英

如何添加累计和列?

[英]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 CRvalue*-1DR时的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM