2014-09-26 26 views
2

我有一個表包含相關元素的ID。需要幫助構建查詢來分組相關元素

ID1 ID2 
A B 
A C 
B D 
B C 
E F 
G D 
G C 
H I 
D C 

的例子包含以下基團:

A,B,C,D,G 
E,F 
H,I 

由於A被連接到B,C,B連接到C,d和d被連接到G. E,F和H ,我只相互關聯。

是否有可能使用SQL查找這些組?不知道什麼是SQL的輸出會是這樣,也許是這樣的:

ID group 
    A 1 
    B 1 
    C 1 
    D 1 
    G 1 
    E 2 
    F 2 
    H 3 
    I 3 

大概是某種形式的分層查詢的將這樣的伎倆,但這些通常是難不倒我。 只要我可以區分組。

+1

我猜[這](http://tkyte.blogspot.de/2005/06/how-to- ask-questions.html)是爲你 – zaratustra 2014-09-26 12:45:27

+0

告訴我們你做了什麼嘗試,我們可以改善呢?如果你沒有在SQL中檢查'group by' – 2014-09-26 12:59:36

回答

0

以下是我發現:

select root2 || ', ' || listagg(id1, ', ') within group (order by id1) grp 
from 
(
    select id1, max(root2) keep (dense_rank last order by lev) root2 
    from 
    (
    select t.*, connect_by_root id2 root2, level lev 
    from <my_table> t 
    connect by prior t.id1 = t.id2 
) 
    group by id1 
) 
group by root2 
; 

這給:

**GRP** 
C, A, B, D, G 
F, E 
I, H 
+0

謝謝,它似乎工作。我用listagg刪除了外部查詢。讓root2列指向一個共同的值適合我的目的。 – Rene 2014-09-29 07:33:37