显示行数最大的总计 row_number

Display total where row number is max row_number

我有一个显示发票信息的查询,在最后一列显示供应商的总余额,我只希望总计显示在该供应商发票条目的最后一行。

即。结果可能包含 20 个供应商的 100 张发票,每个供应商都有不同数量的发票,Account_Total 应该只显示在特定 pt_account 的最后一行。 (row_number 是 pt_account 的最大值。)

当我尝试时,出现窗口错误。

select 
    row_number() over (order by pt_account, pt_trdate), 
    pt_account, pt_trdate, pt_supref, pt_trref, pt_trtype, 
    pt_trvalue - pt_vatval [Net], pt_vatval [Vat], PT_TRVALUE [Total], 
    pt_trbal [Balance],
    Account_Total = (select sum(pt.pt_trbal) from ptran pt 
                     where pt.pt_account = pt1.pt_account)
from 
    ptran pt1
where 
    pt_trbal <> 0
    and pt_advance <> 'Y'
    and pt_account like 'A%'

您可以使用 case 表达式。此外,不需要子查询。您可以使用 window 函数:

select row_number() over (order by pt_account, pt_trdate),
       pt_account, pt_trdate, pt_supref, pt_trref, pt_trtype, pt_trvalue-pt_vatval [Net], pt_vatval [Vat], PT_TRVALUE [Total], pt_trbal [Balance],
       (case when 1 = row_number() over (order by pt_account, pt_trdate desc)
             then sum(pt.pt_trval) over (partition by pt_account)
        end) as Account_Total
from ptran pt1
where pt_trbal <> 0 and pt_advance <> 'Y' and pt_account like 'A%'
order by pt.account, pt_trdate;