将 运行 总计 oracle sql 查询转换为最终总计

Convert a running total oracle sql query to a final total

我有以下有效的查询并得到了我需要的总数。

但是,我需要对其进行更改,以便它仅显示最终总数,而不是导致总数的每笔交易。我尝试过按组按汇总、按组集进行转换,使用最大事务数,但我的总数永远不匹配,而且我不完全理解 select 语句的 SUM 解码部分。我相信我需要将其中的一部分移动到 where 语句来做我需要的。

这里是查询:

SELECT
    SUM(DECODE(tbbdetc_type_ind,'C', (-1) * a.tbraccd_amount,'P',a.tbraccd_amount) ) OVER(
        PARTITION BY a.tbraccd_pidm
        ORDER BY
            a.tbraccd_tran_number
    ) "Running total",
    tbbdetc.tbbdetc_detail_code,
    tbbdetc.tbbdetc_type_ind,
    a.*
FROM
    tbraccd a
    JOIN taismgr.tbbdetc ON a.tbraccd_detail_code = tbbdetc.tbbdetc_detail_code
WHERE
    a.tbraccd_pidm = '101010101'
order by tbraccd_tran_number desc; 

任何关于如何转换它的帮助,以便我得到与最终 运行 总数相匹配的总计,我们将不胜感激。我的最终目标是获得 pidms(IDS) 列表的总计,连续每个 pidm 的总计。

您似乎想要删除 order by。我也会帮助转换为标准 SQL 语法:

sum(case when tbbdetc_type_ind = 'C' then - a.tbraccd_amount
         when tbbdetc_type_ind = 'P' then a.tbraccd_amount
    end) over (partition by a.tbraccd_pidm) as total_total

我最终用这个来得到我需要的东西:

将其放入 Select 语句

SUM(CASE 
    WHEN tbbdetc_type_ind = 'C' THEN -A.tbraccd_amount 
    WHEN tbbdetc_type_ind = 'P' THEN A.tbraccd_amount 
    END)  TOTAL_TOTAL

这在分组之后:

HAVING SUM(CASE 
           WHEN tbbdetc_type_ind = 'C' THEN -A.tbraccd_amount 
           WHEN tbbdetc_type_ind = 'P' THEN A.tbraccd_amount 
           END) > -200.00

这最终给了我每个人一个结果,而不是显示每笔交易的总数