0

我有一个 Oracle Tree 层次结构,它基本上类似于名为 MY_TABLE 的下表

(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   

因此,我需要汇总属于所有(父)链接 ID 的子节点总数,其中 LINK_ID 的 PARENT_LINK_ID 为 NULL

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 回答