2011-02-03 89 views
1

是否有可能为表中的许多行生成“连接方式”并将它们总和。 我有一个表SQL连接多行

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 
+0

很难理解你想要什么。你真的认为那里有一排p1 p3吗?你想要总结一些东西吗? – Randy 2011-02-03 18:44:12

回答

5

更新

看到你更新后,你只需要删除下手。

末更新

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   

添加SUMS和组是很容易