выберите заказ по вопросу - PullRequest
0 голосов
/ 30 октября 2018

Я создал таблицу спецификации следующим образом:

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

А1 является родителем B1, B2, B3, B4; B1 является родителем C1; B2 является родителем C2; ....

Однако, чтобы ясно понять уровень и подсегмент, я надеюсь увидеть:

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

Я не уверен, что применение заказа по может решить эту проблему. Не могли бы вы помочь? Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Вы можете попробовать следующее:

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

Это просто типичный иерархический запрос, который должен дать вам именно то, что вы хотите. Кроме того, как вы можете видеть, я использую ключевое слово LEVEL в запросе. Вам не нужно сохранять эту информацию в таблице, так как Oracle рассчитывает сам уровень в запросе ...

0 голосов
/ 30 октября 2018
SELECT i_rownum, i_level, segment, parent,level 
FROM bom start with parent is null connect by
parent = prior segment;

Я думаю, что это должно работать

0 голосов
/ 30 октября 2018

Если вы используете Oracle 11g или выше, вы можете попробовать использовать Рекурсивный факторинг подзапросов . Этот тип запроса хорош для обхода иерархических структур, подобных вашей. Среди прочего, это дает вам возможность пройти по иерархии в порядке поиска в глубину , что, по-видимому, то, что вы хотите.

...