2017-09-05 9 views
0

2つのテーブルがあります.1つは、結合された(一意の識別子)が各列の値に対して持つべきことを示すマスターテーブルです。各Combinedとその現在の列の値。私は2つのテーブルを比較しようとしていて、マスターテーブルと一致しない各レコードとそのテーブルを表示します。私は現在、データが一致したときにNullを取得していますが、マスターテーブルのデータを入力したいと思います。問題は、マスターテーブルからデータを取得してヌルのレコードをすべて表示すると、少なくとも1つの不一致が表示され、すべてのレコードではないレコードのみが好きなことです。サンプルコードは次のとおりです。これは私に必要な結果が表示されますが、データが一致しない場合にヌルを与える比較2影響を受けるすべてのレコードと異なるテーブルとリスト結果を返します。

select a.combined, B.ID,B.code, 

case 
when A.CODE<>B.CODE 
then A.CODE 
End AS UPDATED_CODE, 

B.QTY, 
case 
when A.QTY<>B.QTY 
Then A.QTY 
End AS UPDATED_QTY 


FROM TABLE1 A 
JOIN TABLE2 B ON A.COMBINED = B.COMBINED 

where UPDATED_CODE is not null 
or UPDATED_QTY is not null 

。これらの結果を表示するだけでなく、NULLがある場合はTABLE1からのデータも提供したいと思います。上記のクエリからの出力例は次のとおりです。

Combined  ID  B.CODE UPDATED_CODE B.QTY A.QTY 
1 1234565646464 1212121 RTD JOR   15  ? 
2 5632232356565 3333333 JOR SBB   15  ? 
3 3253265899656 2222222 SBB SIH   15  ? 
4 2332359654151 1111111 SBB RTD   15  ? 
5 2124184324324 0000000 JOR RTD   15  ? 
6 1654653235466 4444444 JOR RTD   15  ? 
7 4323656235659 7777777 RTD ?   0  15 
+1

場合条件を 'WHERE A.CODE <> B.CODEまたはA.QTY <> B.QTY'に変更し、それぞれ' CASE 'に 'ELSE A.col'を追加する必要があります' – dnoeth

+0

これは完璧に機能しました!私は答えとしてあなたのコメントを選択することはできません。 – MrLockett

+0

あなたは答えとしてコメントを受け入れることができないので、私はこれを答えとして投稿しました:-) – dnoeth

答えて

0

あなたは、一致するデータを持つ行を返すようにしたくない場合は、WHERE A.CODE<>B.CODE OR A.QTY<>B.QTYにあなたの状態を変更し、各CASEELSE B.colを追加する必要があります

select a.combined, B.ID,B.code, 

case 
when A.CODE<>B.CODE 
then A.CODE 
else B.CODE 
End AS UPDATED_CODE, 

B.QTY, 
case 
when A.QTY<>B.QTY 
Then A.QTY 
else B.QTY 
End AS UPDATED_QTY 

FROM TABLE1 A 
JOIN TABLE2 B ON A.COMBINED = B.COMBINED 

where A.CODE<>B.CODE 
    or A.QTY<>B.QTY 
関連する問題