1
SELECT b.KPCNO
         ,b.KPC_FULL_NAME    

FROM xxkpc_hr_personnel_v2  b
WHERE  b.type(+) = 'KPC Employee'
       AND b.DESIGNATION is null
       AND b.kpcno IS NOT NULL
       AND b.ORGANIZATION_ID=(select g.ORGANIZATION_ID from  xxkpc_fn_web_personnel_v g where g.kpcno = :kpcno)
GROUP BY b.KPCNO
          ,b.kpc_full_name

UNION

SELECT b.KPCNO
         ,b.KPC_FULL_NAME
FROM xxkpc_hr_pos_struct_code_comb   a
     ,xxkpc_hr_personnel_v2  b
WHERE b.position_id(+) = a.child_position_id
       AND b.type(+) = 'KPC Employee'
       AND b.kpcno IS NOT NULL
       AND a.PERANT_POSITION_ID =  (select g.POSITION_ID from  xxkpc_fn_web_personnel_v g where g.kpcno = :kpcno)
GROUP BY b.KPCNO
          ,b.kpc_full_name

UNION を使用せずに、これら 2 つのクエリを 1 つのクエリに結合する必要があります。

4

3 に答える 3

2

次のように書けると思います。

select distinct b.kpcno, b.kpc_full_name
  from xxxkpc_hr_personnel_v2 b
 where b.type(+) = 'KPC Employee'
   and b.kpcno is not null
   and (
         (b.designation is null and
          b.organization_id in (select g.organization_id
                                  from xxkpc_fn_web_personnel_v g 
                                 where g.kpcno = :kpcno))
         or
        (b.position_id in (select a.child_position_id
                             from xxkpc_hr_pos_struct_code_comb a
                            where a.parent_position_id = (select g.position_id
                                                            from xxkpc_fn_web_personnel_v g 
                                                           where g.kpcno = :kpcno)))
       )

私が見る限りgroup by、結果を作成するdistinctために を使用しているので、適切なキーワードを使用しました。andは結合されたままabはありません。次の where anded 節でa.parent_position_id = .....

于 2012-06-05T18:03:18.893 に答える
1
SELECT 
    b.KPCNO,
    b.KPC_FULL_NAME
FROM 
    xxkpc_hr_personnel_v2 b
        LEFT OUTER JOIN xxkpc_hr_pos_struct_code_comb a ON b.position_id = a.child_position_id
        INNER JOIN xxkpc_fn_web_personnel_v g ON g.kpcno = :kpcno
WHERE  
    b.type = 'KPC Employee'
AND b.kpcno IS NOT NULL
AND ((b.DESIGNATION IS NULL AND g.ORGANIZATION_ID = b.ORGANIZATION_ID) 
    OR (a.PERANT_POSITION_ID = g.POSITION_ID))
于 2012-06-05T18:03:25.267 に答える
0

とにかく2 つのテーブルを結合する必要がありますか? b.KPCNOまたはb.KPC_FULL_NAMEで参加できるようです。

于 2012-06-05T17:53:45.067 に答える