select amount, status
case
when max(amount) then
(select sum(a1.amount)+a2.amount
from payments a1
join payments a2 on a1.payment_id=a2.payment_id
where a2.status = 't'
and a1.status not like 'w'
group by a1.amount,a2.amount)
else sum(amount)
end
from payments
Amount | Status
--------| ------
10 | t
20 | w
30 | t
40 | w
50 | t
60 | t
70 | k
预期结果:如果金额是最大值,则计算新列的金额,如sum(a1.amount)+ a2.amount,其中表a1的状态为't',而a2的状态不是'w'。如果金额不是最大金额,那么只需计算表格付款的所有金额。
结果:
- 对于金额= 70,插入新列(例如结果)总和(状态不是'w'的所有金额)+ sum(状态为't'的所有金额)。
- 其他金额< 70插入新列结果总和(所有金额)。
感谢您的帮助。
答案 0 :(得分:0)
这将有助于我猜
select amt,status,(case when amt=max_amt then w_sum else total_sum end)results
from (
select amt,
status,
sum(amt) over(partition by (case when status='w' and status<>'t' then 1 else 0 end ))w_sum,
sum(amt) over(partition by 1) total_sum,
max(amt) over(partition by 1) max_amt
from t st)x
让我知道它是否适合你。