SQL соединяется для многих строк - PullRequest
1 голос
/ 03 февраля 2011

Можно ли сгенерировать "connect by" для многих строк в таблице и суммировать их все.У меня есть таблица

person boss
---------------    
person1 NULL
person2 person1
person3 person2

И я хочу получить таблицу

boss is_boss_of
---------------
person1 person2
person1 person3
person2 person3

Я хотел бы сделать соединение выражением для всех в таблице человек-босс?Есть ли способ сделать это?

Говоря о сумме, я думал о чем-то вроде этого

SELECT CONNECT_BY_ROOT person as boss, person as is_boss_of
            FROM table1
            START WITH boss = person1
            CONNECT BY PRIOR Empno = Mgr;
Union
SELECT CONNECT_BY_ROOT person as boss, person as is_boss_of
            FROM table1
            START WITH boss = person2
            CONNECT BY PRIOR Empno = Mgr;
Union
...
and so on

1 Ответ

5 голосов
/ 03 февраля 2011

Обновление

После просмотра вашего обновления вам просто нужно сбросить START WITH.

Окончание обновления

CONNECT_BY_ROOT - это то, что вы ищете

Это утверждение

SELECT distinct RootBoss, Person FROM (
with employee  as 
(
  Select 1 person , null boss from Dual
  UNION Select 2 , 1 from dual
  UNION Select 3 , 2 from dual
)
SELECT CONNECT_BY_ROOT boss RootBoss, person
FROM employee connect_by

  connect by prior person = boss
  ORDER BY person

  ) t
WHERE ROOTBOSS is not null
ORDER BY
RootBoss, Person

Выходы

ROOTBOSS               PERSON                 
---------------------- ---------------------- 
1                      2                      
1                      3                      
2                      3        

Добавление сумм и групп довольно просто

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...