我有一個場景,我需要獲取同一個來源的ID內的所有記錄。下面給出的是我的輸入記錄集Oracle查詢與組
ID SOURCE CURR_FLAG TYPE
1 IBM Y P
1 IBM Y OF
1 IBM Y P
2 IBM Y P
2 TCS Y P
3 IBM NULL P
3 IBM NULL P
3 IBM NULL P
4 IBM NULL OF
4 IBM NULL OF
4 IBM Y ON
從上面的設置,我需要選擇相同的ID內的所有源作爲IBM記錄group.Within的ID組,如果有至少一個記錄與除IBM之外的其他來源,那麼我不希望來自該ID組的任何記錄。此外,我們只需要提取那些至少有一條記錄位於該組ID中的記錄,其中curr_fl ='Y'
在上述場景中,即使ID = 3的源爲IBM,但沒有記錄CURR_FL ='Y',我的查詢不應該取值。在ID = 4的情況下,它可以取所有ID = 4的記錄,因爲其中一條記錄的值='Y'。
在滿足上述條件的組內,我還需要一個更多的source_type條件。如果有記錄的source_type ='P',那麼我只需要抓取該記錄。如果沒有P記錄,那麼我將搜索source_type ='OF'else source_type ='ON'
我有寫了一個如下所示的查詢。但它運行很長,並沒有獲取任何結果。有沒有更好的方法來修改這個查詢
select
ID,
SOURCE,
CURR_FL,
TYPE
from TABLE a
where
not exists(select 1 from TABLE B where a.ID = B.ID and source <> 'IBM')
and exists(select 1 from TABLE C where a.ID = C.ID and CURR_FL = 'Y') and
(TYPE, ID) IN (
select case type when 1 then 'P' when 2 then 'OF' else 'ON' END TYPE,ID from
(select ID,
max(priority) keep (dense_rank first order by priority asc) as type
from (select ID,TYPE,
case TYPE
when 'P' then 1
when 'OF' then 2
when 'ON' then 3
end as priority
from TABLE where ID
in(select ID from TABLE where CURR_FL='Y') AND SOURCE='IBM')
group by ID))
謝謝。但我還有一個source_type的場景。我可以在這個查詢中包含 – GIN
@GIN答案已更新。 –
非常感謝Tim。爲了澄清我的情況,只有在沒有記錄的情況下,我需要ON記錄,其中source_type ='P'或source_type ='OF'。優先級是P - > OF - > ON。 – GIN