我为单个交易ID选择了以下查询,以汇总我们会计系统的销售总成本。此查询将需要汇总所有tranid的成本,但是我仅在下面选择一个特定的tranid。
问题出在每笔交易中,因为系统存储了已删除并替换为给定交易(或tran id)的供应商票据,所以我得到多个交易号。
原始查询是
select ift.tranid, ift.transaction_number, a.full_name, sum(tl.amount)
tranamt
from ns.tbill ift
inner join ns.transaction_lines tl on ift.transaction_id = tl.transaction_id
inner join ns.accounts a on tl.account_id = a.account_id
inner join ns.locations l on l.location_id = ift.location_id
where tranid = '330167473' and a.full_name like '%Cost of Sales%'
group by ift.tranid, l.full_name, ift.transaction_number
我现在得到的结果是
tranid transaction_number full_name tranamt
330167473 VENDBILL34246 Cost of Sales 22867.92
330167473 VENDBILL34429 Cost of Sales 22867.92
所需结果如下
330167473 VENDBILL34429 Cost of Sales 22867.92
我只想返回一行,但是不确定如何将Max应用于transaction_number,这样对于给定的tranid只返回一行。如您所愿,它当前正在复制此特定记录的数量,并且在将具有多个vendbill的记录的所有tranid相加时会这样做。
我做的如此之遥
按以下方式应用MAX会产生错误“除非在HAVING子句或选择列表中包含的子查询中,否则聚合可能不会出现在WHERE子句中,并且正在聚合的列是外部引用。”因此目前尚不清楚如何在这种情况下正确应用max。
select ift.tranid, ift.transaction_number, a.full_name, sum(tl.amount)
tranamt
from ns.tbill ift
inner join ns.transaction_lines tl on ift.transaction_id =
tl.transaction_id
inner join ns.accounts a on tl.account_id = a.account_id
inner join ns.locations l on l.location_id = ift.location_id
where tranid = '330167473' and a.full_name like '%Cost of Sales%' and
ift.transaction_number >= (select max(ift.transaction_number) from
ns.tbill)
group by ift.tranid, a.full_name, ift.transaction_number
如果我将MAX本身添加到transaction_number本身,则会得到一个VENDBILL,但交易金额仍为44k。
select ift.tranid, ift.transaction_number, a.full_name, sum(tl.amount) tranamt
from ns.tbill ift
inner join ns.transaction_lines tl on ift.transaction_id =
tl.transaction_id
inner join ns.accounts a on tl.account_id = a.account_id
inner join ns.locations l on l.location_id = ift.location_id
where tranid = '330167473' and a.full_name like '%Cost of Sales%'
and ift.transaction_number >= (select max(ift.transaction_number)
from ns.tbill)
group by ift.tranid, a.full_name, ift.transaction_number
结果:
330167473 VENDBILL34429 Cost of Sales 45735.84
这里提供正确的逻辑帮助会很棒
答案 0 :(得分:0)
@JNevill在评论中发布了以下答案,从而解决了我的问题
ift.transaction_number = (select max(transaction_number) from ns.tbill
WHERE ift.tranid = tbill.tranid)