我创建了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
我不确定通过下单可以解决此问题。你能帮忙吗?非常感谢!
答案 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;
我认为这应该有效