2016-10-11 14 views
-1

私はこれら2つのテーブルを持っていますが、結果を得るためにEMP_PHONE_IDを使って参加します。 JOIN条件はもう少しです 複雑ですが、これは単なるサンプルです。私は2つのテーブルを結合するとき、各EMP_IDが2つのEMP_PHONE_IDにマップするので、各EMP_ID に対して2行を取得しています。私は最終結果をPERMとTEMPの両方の値を組み合わせた単一の行にしたいと思います。SELECT文で複数の行を1行にまとめる

TABLE B 

EMP_PHONE_ID  || PERM_VALUE || TEMP_VALUE 
1     ||  value1  ||  NULL 
2     ||  NULL  ||  value2 
3     ||  value3  ||  NULL 
4     ||  NULL  ||  value4 


TABLE A 

EMP_ID  ||EMP_PHONE_ID ||CODE 
1   ||1   ||1  
1   ||2   ||2 
2   ||3   ||1  
2   ||4   ||2    




DESIRED RESULTS 

EMP_ID  || PERM_VALUE || TEMP_VAL 
1   ||  value1  ||  value2 
2   ||  value3  ||  value4 

Here's my select 
    SELECT 
    CASE WHEN A.CODE = 1 THEN B.PERM_VALUE END AS PERM_VALUE1, 
    ASE WHEN A.CODE = 2 THEN B.PERM_VALUE END AS PERM_VALUE2 
    FROM TABLE A A, TABLE B B 
    WHERE A.EMP_PHONE_ID = B.EMP_PHONE_ID; 



DESIRED RESULTS 

EMP_ID  || PERM_VALUE || TEMP_VAL 
1   ||  value1  ||  value2 
2   ||  value3  ||  value4 

答えて

0

Inner join + Group By + Min or Max集合体はあなたのために働く必要があります

SELECT EMP_ID, 
     Min(PERM_VALUE) as PERM_VALUE, 
     Min(TEMP_VALUE) as TEMP_VALUE 
FROM TABLEA A 
     JOIN TABLEB B 
     ON A.EMP_PHONE_ID = B.EMP_PHONE_ID 
GROUP BY EMP_ID 

あなたはCodeに基づいてデータを表示したい場合は、この

SELECT EMP_ID, 
     Min(CASE WHEN A.CODE = 1 then PERM_VALUE end) as PERM_VALUE, 
     Min(CASE WHEN A.CODE = 2 then TEMP_VALUE end) as TEMP_VALUE 
FROM TABLEA A 
     JOIN TABLEB B 
     ON A.EMP_PHONE_ID = B.EMP_PHONE_ID 
GROUP BY EMP_ID 

を使用私はあなたが保存されていると思いますデータが間違った形式で表示されるTABLEA

+0

これは、PERM_VALUEが常にMINでTEMP_VALUEが常にMAXの場合に機能しますが、私の場合はこれらの値が異なり、行間でも一致します。 –

+0

@ Mr.Maze - 私は 'Max'集計を使いませんでした。私は' Min'または 'Max'集計を意味しました。私は、 'TABLE A'の各' EMP_ID'に常に2つの関連する行があると考えています。 –

+0

です。私はテーブルと、私が問題を反映するために使用しているクエリを洗練しました。 –

関連する問題