2016-12-19 18 views
0

私は2つのビューview_aとview_bを結合する必要があります。
view_aはOracle 5つの条件で2つのビューを結合

所望の結果
ID、名前、アドレス1、アドレス2、市、州、CNTRYのjob_title ID、アドレス1、アドレス2、市、州、 view_b ID、frst_name、姓、タイプ、日付をCNTRY列を有しています、job_title

私のクエリの条件は次のとおりです。
1.両方のビューをidカラムに結合します。
2.日付DESC順
3 CONCATENATEのFIRST_NAMEと
4種類のLAST_NAMEつ以上の役員は、次にある場合、「役員」
5に等しいに基づいて、一つだけ役員すなわち、1つの上の行を得ます日付。
6.役員がいない場合は、結果のnameおよびjob_title列にnull値が設定されています。

私が使用しているクエリ:

select 
     * 
    from 
     view_a A 
    join 
    (
      select 
       (first_name || ' ' || last_name) as name, 
       job_title, 
       id 
      from 
       view_b 
        where 
       type = 'officer' 
        and 
       id is not null 
      order by date desc fetch first 1 row only 
    ) B 
    on A.id=B.id 
をしかし、このクエリは一つだけの結果を得ています。私はOracle 12cを使用しています。これらのビューには約800,000のレコードがあります。あなたがこれを行うことができます

答えて

1

select id, 
    name, 
    address1, 
    address2, 
    city, 
    state, 
    cntry, 
    job_title 
(select 
    a.id, 
    nvl2(nvl(b.first_name, b.last_name),b.first_name||' '||b.last_name,null) Name, 
    a.address1, 
    a.address2, 
    a.city, 
    a.state, 
    a.cntry, 
    b.job_title, 
    a.date 
    row_number() over (partition by a.id order by a.date desc nulls last) rn 
from 
    view_a a left outer join 
    view_b b 
on a.id = b.id 
and b.type = 'officer') 
where rn = 1 
order by date desc nulls last; 
+0

このクエリが正常に動作しているが、何も「官」のタイプが存在しない場合、私はレコードを取得していませんよ、その列がnullのレコードを取得する必要があります。 – CodingFreak

+0

@CodingFreak Fixed。今すぐお試しください – GurV

0

を次のようにも、問題を解決:

SELECT * 
FROM view_a a 
    LEFT JOIN (SELECT name, job_title, id 
      FROM (SELECT (first_name || ' ' || last_name) AS name, 
         job_title, 
         id, 
         ROW_NUMBER() OVER(PARTITION BY id ORDER BY date DESC) rn 
        FROM view_b 
        WHERE TYPE = 'officer' AND id IS NOT NULL) 
      WHERE rn = 1) b 
     ON a.id = b.id 
関連する問題