2016-06-20 13 views
0

2つのテーブル間でレコードを集約したいとします。私はTB_SRS_MSTテーブルで外部結合を残してみましたが、望みの結果が得られました。基本的には、TB_DLR_STSテーブルに存在しないすべてのシリーズに対して " - "を表示したいと思います。左外部結合を伴う集約レコード

TB_DLR_STS TABLE

DLR_CD SRS_CD STS 
    D1 S1  Y 
    D1 S2  N 
    D2 S2  Y 
    D2 S3  Y 
    D3 S1  N 

TB_STS_MST表

SRS_CD 
    S1  
    S2  
    S3  
    S4  

所望の出力

DLR_CD SRS_CD STS 
D1  S1  Y 
D1  S2  N 
D1  S3  - 
D1  S4  - 
D2  S1  - 
D2  S2  Y 
D2  S3  Y 
D2  S4  - 
D3  S1  N 
D3  S2  - 
D3  S3  - 
D3  S4  - 
+0

ここで、「S4」はどこから来ますか? –

+0

申し訳ありません。TB_SRS_MSTレコード – user2101952

答えて

0

私は仮定TB_STS_MSTテーブル内のデータは、実際にはより次のようになりますので、仮定し

SRS_CD 
S1  
S2  
S3  
S4 

、最初にあなたの目的のリストを定義する必要があります - あなたはcross joincartesian productを作成することによってこれを行うことができます。その後、​​3210とouter joinを使用することができます。

select t.dlr_cd, t.srs_cd, coalesce(ds.sts, '-') sts 
from (
    select distinct ds.dlr_cd, sm.srs_cd 
    from TB_DLR_STS ds cross join TB_STS_MST sm 
) t left join TB_DLR_STS ds on t.dlr_cd = ds.dlr_cd 
          and t.srs_cd = ds.srs 
+0

ありがとうございます。 – user2101952

+0

@ user2101952この回答が問題を解決した場合は、それを受け入れることができますか? – niceman

0

は、左のパーティションに参加して行うことができます。

select tb_dlr_sts.dlr_cd, 
     tb_sts_mst.srs_cd, 
     nvl(tb_dlr_sts.sts, '-') as sts 
    from tb_sts_mst 
     left join tb_dlr_sts partition by (tb_dlr_sts.dlr_cd) on tb_dlr_sts.srs_cd = tb_sts_mst.srs_cd 
関連する問題