1
SELECT ppse.SUBORDINATE_POSITION_ID child_position_id
               ,ppse.PARENT_POSITION_ID manger_position_id
               ,b.person_id
FROM per_pos_structure_elements_v ppse
      ,APPS.xxkpc_hr_personnel_v2_mv  b
WHERE b.position_id(+) = ppse.SUBORDINATE_POSITION_ID

AND ppse.POS_STRUCTURE_VERSION_ID =64
AND ppse.PARENT_POSITION_ID=12493

このクエリの出力:

12604   12493   400 
12605   12493   108 
13644   12493   37897   
12752   12493   18  
13643   12493       
13642   12493       
13641   12493       



SELECT ppse.SUBORDINATE_POSITION_ID child_position_id
               ,ppse.PARENT_POSITION_ID manger_position_id
               ,b.person_id
FROM per_pos_structure_elements_v ppse
              ,APPS.xxkpc_hr_personnel_v2_mv  b
WHERE b.position_id(+) = ppse.SUBORDINATE_POSITION_ID

AND ppse.POS_STRUCTURE_VERSION_ID =64
AND ppse.PARENT_POSITION_ID=12504


12514   12504   449
12483   12504   450
12487   12504   456
12497   12504   156
12889   12504   168
12493   12504   

12493は最初のクエリの親であり、2番目のクエリの子であるため、nullのperson_id(3番目の列)を持ち、2番目のクエリのように子の親ではないすべての行を削除する必要があります。最後の行を削除できません。彼は最初のように子の親です。クエリしますが、最初のクエリの最後の3行を削除します

4

1 に答える 1

0

このようなものを試してみてください...

SELECT ppse.SUBORDINATE_POSITION_ID child_position_id
           ,ppse.PARENT_POSITION_ID manger_position_id
           ,b.person_id
FROM per_pos_structure_elements_v ppse
  ,APPS.xxkpc_hr_personnel_v2_mv  b
WHERE b.position_id(+) = ppse.SUBORDINATE_POSITION_ID
AND b.type(+) = 'KPC Employee'
AND ppse.POS_STRUCTURE_VERSION_ID =64
AND ppse.PARENT_POSITION_ID=12493
AND 
(b.person_id!=null OR 
 ppse.SUBORDINATE_POSITION_ID in
             (SELECT SUBORDINATE_POSITION_ID from per_pos_structure_elements_v))
于 2012-07-29T08:21:49.847 に答える