显示行数最大的总计 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;
我有一个显示发票信息的查询,在最后一列显示供应商的总余额,我只希望总计显示在该供应商发票条目的最后一行。
即。结果可能包含 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;