oracle 递归计算,SQL(Oracle)中的递归计算
好吧,我想我已經(jīng)有了解決方案.這些數(shù)字與你的數(shù)字有點不同,但我相當(dāng)確定我的正在做你想要的.我們可以在第1步和第1步中完成所有工作. 2使用單個查詢(main_sql).必須使用遞歸語句(recur_sql)完成3和4.
with main_sql as (
select a.*,
b.*,
sum(a_amt) over (partition by b_id) as cd_amt,
rank() over (partition by a_cd order by b_id) as rnk
from (select a_cd, a_flag, sum(a_amt) as a_amt
from tablea
group by a_cd, a_flag) a,
tableb b
where a.a_flag = case when b.b_flag = 'Y' then a.a_flag else b.b_flag end
order by b_id, a_cd
),
recur_sql (a_cd, b_id, total_amt, cd_amt, resulting_ratio, resulting_amt, rnk) as (
select m.a_cd,
m.b_id,
m.a_amt as total_amt,
m.cd_amt, m.a_amt / m.cd_amt as resulting_ratio,
m.a_amt + (m.a_amt / m.cd_amt * m.b_amt) as resulting_amt,
rnk
from main_sql m
where rnk = 1
union all
select m.a_cd,
m.b_id,
r.resulting_amt as total_amt,
m.cd_amt,
r.resulting_amt / m.cd_amt as resulting_ratio,
r.resulting_amt + (r.resulting_amt / m.cd_amt * m.b_amt) as resulting_amt,
m.rnk
from recur_sql r,
main_sql m
where m.rnk > 1
and r.a_cd = m.a_cd
and m.rnk - 1 = r.rnk
)
select a_cd, b_id, total_amt, resulting_ratio, resulting_amt
from recur_sql
order by 2, 1
總結(jié)
以上是生活随笔為你收集整理的oracle 递归计算,SQL(Oracle)中的递归计算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 屏下Face ID摄像头有什么优点哪款i
- 下一篇: 苹果家族哪款产品最受欢迎谁是无冕之王