0

MY_TABLE と呼ばれる次のテーブルに基本的に似た Oracle ツリー階層構造があります。

(LINK_ID,
 PARENT_LINK_ID,
 STEP_ID )

MY_TABLE 内の次のサンプル データを使用します。

LINK_ID     PARENT_LINK_ID      STEP_ID
-----------------------------------------------
A           NULL                0
B           NULL                0
AA          A                   1
AB          A                   1
AAA         AA                  2
BB          B                   1
BBB         BB                  2
BBBA        BBB                 3
BBBB        BBB                 3

上記のサンプル データに基づいて、基本的に両方の親リンク ID のすべての子の行の合計数を返すレポートを作成する必要があります (トップ レベルのみが必要です)。つまり、次を返す SQL クエリを作成する必要があります。情報、すなわち:

PARENT  RESULT COUNT
----------------------------
A       3
B       4   

したがって、LINK_ID の PARENT_LINK_ID が NULL であるすべての (親) リンク ID に属する合計の子をロールアップする必要があります。

4

2 に答える 2

1

私はこのようなことを考えます:

select link, count(*)-1 as "RESULT COUNT"
  from (
    select connect_by_root(link_id) link
    from my_table
    connect by nocycle parent_link_id = prior link_id
    start with parent_link_id is null)
group by link
order by 1 asc
于 2013-11-11T07:20:33.957 に答える
0

してみてください:

WITH parent(LINK_ID1, LINK_ID, asCount) AS
(
  SELECT LINK_ID LINK_ID1, LINK_ID, 1 as asCount  
  from MY_TABLE WHERE PARENT_LINK_ID is null

  UNION ALL 

  SELECT LINK_ID1, t.LINK_ID, asCount+1 as asCount  FROM parent
  INNER JOIN MY_TABLE t ON t.PARENT_LINK_ID =  parent.LINK_ID
    )
select 
  LINK_ID1 "Parent", 
  count(asCount)-1 "Result Count"
From parent 
group by LINK_ID1;

SQL フィドルのデモ

于 2013-11-11T07:27:33.900 に答える