求論壇大佬幫忙看看以下SQL要如何寫才可以獲得我要的結果呀?
已知:
表1
————————————————
目標部門 范圍部門
A B
D D
表2
————————————————
部門 上級部門
A
B A
C B
D
E D
F B
求:根據部門去查找這個部門對應的目標部門,如果找不到,則找上一級部門對應的目標部門,回圈直到找到目標部門。
最終實作效果如下:
部門 目標部門
——————————
A A
B A
C A
D D
E D
E A
uj5u.com熱心網友回復:
with tab1 as (
select 'a' target_id from dual union all
select 'd' tar from dual
)
, tab2 as (
select 'a' id, null parent_id from dual union all
select 'b' id, 'a' parent_id from dual union all
select 'c' id, 'b' parent_id from dual union all
select 'd' id, null parent_id from dual union all
select 'e' id, 'd' parent_id from dual union all
select 'f' id, 'b' parent_id from dual
)
, tab3 as (
select connect_by_root(t1.id) id,
case when t1.id in (select v1.target_id from tab1 v1) then t1.id else null end tar_
from tab2 t1
connect by prior t1.parent_id = t1.id
and prior t1.id not in (select v1.target_id from tab1 v1)
)
select t1.id, max(t1.tar_) from tab3 t1 group by t1.id
order by t1.id
;
uj5u.com熱心網友回復:
哦哦,不好意思,可能我舉的例子不夠詳細,這種寫法是當所有的目標組織都是最頂層組織的時候。現在我面臨的問題是,也可能是出現以下情況:
已知:
表1
————————————————
目標部門 范圍部門
A B
C C
E E
表2
————————————————
部門 上級部門
A
B A
C B
D
E D
F B
求:根據部門去查找這個部門對應的目標部門,如果找不到,則找上一級部門對應的目標部門,回圈直到找到目標部門。
最終實作效果如下:
部門 目標部門
——————————
A
B A
C C
D
E E
F
能幫忙再看看嗎?
uj5u.com熱心網友回復:
A的目標部門為什么不是A而是null?
uj5u.com熱心網友回復:
哦。A部門的目標是A。uj5u.com熱心網友回復:
哦。A部門的目標是A。
那這個陳述句有問題?
with tab1 as (
select 'a' target_id from dual union all
select 'c' target_id from dual union all
select 'e' tar from dual
)
, tab2 as (
select 'a' id, null parent_id from dual union all
select 'b' id, 'a' parent_id from dual union all
select 'c' id, 'b' parent_id from dual union all
select 'd' id, null parent_id from dual union all
select 'e' id, 'd' parent_id from dual union all
select 'f' id, 'b' parent_id from dual
)
, tab3 as (
select connect_by_root(t1.id) id,
case when t1.id in (select v1.target_id from tab1 v1) then t1.id else null end tar_
from tab2 t1
connect by prior t1.parent_id = t1.id
and prior t1.id not in (select v1.target_id from tab1 v1)
)
select t1.id, max(t1.tar_) from tab3 t1 group by t1.id
order by t1.id
;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/49720.html
標籤:開發
上一篇:有一段SQL陳述句,在PLSQL上可以執行,為什么VS上出現了ORA-00923: 未找到要求的 FROM 關鍵字
下一篇:ORACLE觸發器問題
