select 按问题排序

select order by issue

我创建了 BOM table 如下:

i_rownum i_level segment parent
  1   0   A1   -
  2   1   B1   A1
  3   1   B2   A1
  4   1   B3   A1
  5   1   B4   A1
  6   2   C1   B1
  7   2   C2   B2
  8   2   C3   B3
  9   3   D1   C3
  10   3    D2   C3

A1 是 B1,B2,B3,B4 的父级; B1 是 C1 的父级; B2 是 C2 的父级;....

但是,要清楚地了解level和subsegment,我希望看到的是:

i_rownum i_level segment parent
  1   0   A1   -
  2   1   B1   A1
  3   2   C1   B1
  4   1   B2   A1
  5   2   C2   B2
  6   1   B3   A1
  7   2   C3   B3
  8   3   D1   C3
  9   3   D2   C3
  10   1    B4    A1

我不确定应用 order by 是否可以解决这个问题。你能帮忙吗?非常感谢!

如果您使用的是 Oracle 11g 或更高版本,您可以尝试使用 Recursive Subquery Factoring。 这种查询非常适合遍历像您这样的层次结构。除其他外,它使您有可能遍历 depth-first search order 中的层次结构,这显然是您想要的。

您可以尝试以下方法:

SELECT segment, parent, level
  FROM <TABLE>
 START WITH PARENT = '-'
 CONNECT BY PARENT = PRIOR segment

这只是典型的分层查询,应该可以准确地满足您的需求。此外,如您所见,我在查询中使用了 LEVEL 关键字。您不需要将此信息保存在 table 中,因为 Oracle 会在查询中自行计算级别...

SELECT i_rownum, i_level, segment, parent,level 
FROM bom start with parent is null connect by
parent = prior segment;

我认为这应该可行