Teradata,子查询以防万一

时间:2016-09-08 10:31:31

标签: sql subquery case teradata

你能帮帮我吗?我需要在子查询中插入,但teradata不允许我这个查询,我怎么能改变它(像类似的查询,如果)?

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插入新列结果总和(所有金额)。

感谢您的帮助。

1 个答案:

答案 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

让我知道它是否适合你。