需要帮助构建查询以对相关元素进行分组

时间:2014-09-26 12:28:13

标签: sql oracle hierarchical

我有一个表格,其中包含相关元素的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 个答案:

答案 0 :(得分: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