2016-10-20 7 views
0
select * 
    from (
     select distinct 
       papf.employee_number 
      , papf.full_name/*, pap.name*/ 
      , pg.name "Grade" 
      , MAX(pap.creation_date) AS "Maximum Date" 
      , MIN(pap.creation_date) AS "Minimum Date" 
      , CASE WHEN max(pap.creation_date) = (pap.creation_date) 
        THEN pap.name 
        ELSE null END AS "New Position" 
      , CASE WHEN min(pap.creation_date) = (pap.creation_date) 
        THEN pap.name 
        ELSE null END AS "Old Position" 
      from per_all_positions pap 
      , per_all_assignments_f paaf 
      , per_all_people_f papf 
      , per_grades pg 
      where paaf.position_id = pap.position_id 
      and paaf.person_id = papf.person_id 
      and paaf.grade_id = pg.grade_id 
      and papf.employee_number = 00871 
      and papf.effective_end_date = '31-DEC-4712' 
      and pg.name IN ('SVP', 'EVP I', 'EVP II', 'SEVP I', 'SEVP II') 
      --and paaf.effective_end_date = '31-DEC-4712' 
      group by papf.employee_number 
       , papf.full_name 
       , pap.name 
       , pg.name 
       , pap.creation_date 
     ) 



    EMPLOYEE_NUMBER FULL_NAME Grade Maximum Date Minimum Date New Position Old Position 
1 00871 Mr. Tahir Mahmood Afzal Raja SVP 4/9/2014 3:44:22 PM 4/9/2014 3:44:22 PM Area Manager.1.MBL - Area Office Islamabad II Area Manager.1.MBL - Area Office Islamabad II 
2 00871 Mr. Tahir Mahmood Afzal Raja SVP 7/24/2013 9:57:35 AM 7/24/2013 9:57:35 AM Branch Manager.1.MBL - Bahria Town Branch, Rawalpindi Branch Manager.1.MBL - Bahria Town Branch, Rawalpindi 

が、それは新しい示しており、 2行の古いポジション とそれを繰り返すので、私が欲しいものをする方法を教えてください?このクエリ はoracle HRMSであり、PL/SQL開発者で書かれています。は、私は、Oracle HRMSでの作成日付に関して2列の「新しい位置」と「オールド・ポジション」としてではなく一列に位置名前を表示したいあなたは出力を見ることができるように

答えて

0

あなたはクエリが良いですが、CASE ...を最大で削除し、グループを削除するのを忘れるのはpap.creation_dateです。あなたがそれをすれば、あなたは必要なものを手に入れます。しかし、集計関数MAX() keep (first)を使用したいと思います。私はそれにコードを書く

select * 
    from (
     select distinct 
       papf.employee_number 
      , papf.full_name/*, pap.name*/ 
      , pg.name "Grade" 
      , MAX(pap.creation_date) AS "Maximum Date" 
      , MIN(pap.creation_date) AS "Minimum Date" 
      , MAX(pap.name) KEEP (dense_rank FIRST order by pap.creation_date DESC) AS "New Position" 
      , MIN(pap.name) KEEP (dense_rank FIRST order by pap.creation_date) AS "Old Position" 
      from per_all_positions pap 
      , per_all_assignments_f paaf 
      , per_all_people_f papf 
      , per_grades pg 
      where paaf.position_id = pap.position_id 
      and paaf.person_id = papf.person_id 
      and paaf.grade_id = pg.grade_id 
      and papf.employee_number = 00871 
      and papf.effective_end_date = '31-DEC-4712' 
      and pg.name IN ('SVP', 'EVP I', 'EVP II', 'SEVP I', 'SEVP II') 
      --and paaf.effective_end_date = '31-DEC-4712' 
      group by papf.employee_number 
       , papf.full_name 
       , pg.name 
     ) 
+0

ありがとう。それは完璧に動作します! – Asad

関連する問題