For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!
Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.
WITH manager_list AS ( SELECT name, LTRIM(MAX(SYS_CONNECT_BY_PATH(id,',')) KEEP (DENSE_RANK LAST ORDER BY curr),',') AS employees FROM (SELECT m.name, e.id, ROW_NUMBER() OVER (PARTITION BY m.name ORDER BY e.id) AS curr, ROW_NUMBER() OVER (PARTITION BY m.name ORDER BY e.id) -1 AS prev FROM manager m, join_table jt, employee e WHERE m.id = jt.manager_id AND jt.employee_id = e.id AND m.name = :P_MANAGER) GROUP BY name CONNECT BY prev = PRIOR curr AND name = PRIOR name START WITH curr = 1 ), all_list AS ( SELECT name, LTRIM(MAX(SYS_CONNECT_BY_PATH(id,',')) KEEP (DENSE_RANK LAST ORDER BY curr),',') AS employees FROM (SELECT m.name, e.id, ROW_NUMBER() OVER (PARTITION BY m.name ORDER BY e.id) AS curr, ROW_NUMBER() OVER (PARTITION BY m.name ORDER BY e.id) -1 AS prev FROM manager m, join_table jt, employee e WHERE m.id = jt.manager_id AND jt.employee_id = e.id) GROUP BY name CONNECT BY prev = PRIOR curr AND name = PRIOR name START WITH curr = 1 ) SELECT a.* FROM manager_list m, all_list a WHERE m.employees = a.employees
WITH manager_list AS ( SELECT name, LTRIM(MAX(SYS_CONNECT_BY_PATH(id,',')) KEEP (DENSE_RANK LAST ORDER BY curr),',') AS employees FROM (SELECT m.name, e.id, ROW_NUMBER() OVER (PARTITION BY m.name ORDER BY e.id) AS curr, ROW_NUMBER() OVER (PARTITION BY m.name ORDER BY e.id) -1 AS prev FROM manager m, join_table jt, employee e WHERE m.id = jt.manager_id AND jt.employee_id = e.id) GROUP BY name CONNECT BY prev = PRIOR curr AND name = PRIOR name START WITH curr = 1 ) SELECT a.* FROM manager_list m, manager_list a WHERE m.employees = a.employees AND m.name = :P_MANAGER
AND a.name != :P_MANAGER
with manager (id, name) as( select 1, 'John' from dual union select 2, 'Bob' from dual union select 3, 'Mary' from dual union select 4, 'Sue' from dual union select 5, 'Alan' from dual union select 6, 'Mike' from dual), join_table (manager_id, employee_id) as( select 1, 101 from dual union select 1, 102 from dual union select 1, 103 from dual union select 2, 101 from dual union select 2, 102 from dual union select 2, 104 from dual union select 2, 105 from dual union select 3, 106 from dual union select 3, 107 from dual union select 4, 106 from dual union select 4, 107 from dual union select 5, 101 from dual union select 5, 102 from dual union select 5, 103 from dual union select 5, 106 from dual union select 5, 107 from dual union select 6, 101 from dual union select 6, 102 from dual union select 6, 103 from dual), tmp as( select a.name,a.ID,b.employee_id, count(*) over(partition by a.ID) as cnt from manager a Join join_table b on a.id= b.manager_id) select b.name from tmp a,tmp b where a.cnt = b.cnt and a.name = 'John' and a.name != b.name and a.employee_id = b.employee_id group by b.id,b.name,a.cnt having count(*) = a.cnt; NAME ---- Mike