按问题选择订单

时间:2018-10-30 08:32:09

标签: sql oracle hierarchical-data

我创建了BOM表,如下所示:

Integer

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

但是,为了清楚地了解级别和细分,我希望看到的是:

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

我不确定通过下单可以解决此问题。你能帮忙吗?非常感谢!

3 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

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

这只是典型的层次查询,应准确地提供您想要的内容。此外,如您所见,我在查询中使用LEVEL关键字。您不需要将此信息保存在表中,因为Oracle会在查询中自行计算级别...

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

我认为这应该有效