SQLの入力となるこれに似たテーブルがあります
ID Value
FRY6040501ACH19 1388
FRY6040501ACH19 1389
FRY6040501ACH19 1388
<Null> 13800
<Null> 13800
<Null> <Null>
0026003710022745 1388
0026003710022752 <Null>
0026003710022751 32750
0026003710022751 32750
0026003710022751 32750
Status
列を追加して出力を取得するには、SQL を記述する必要があります。
ロジックを説明するために中間列を追加していTmpCntID
ますTmpCntVl
SQL からの必要な出力は次のとおりです: ( TmpCntID
&TmpCntVl
不要)
ID TmpCntID Value TmpCntVl Status
FRY6040501ACH19 3 1388 2 MisMatch
FRY6040501ACH19 3 1389 1 MisMatch
FRY6040501ACH19 3 1388 2 MisMatch
<Null> 3 13800 2 MisMatch
<Null> 3 13800 2 MisMatch
<Null> 3 <Null> 1 MisMatch
0026003710022745 1 1388 1 NA
0026003710022752 1 <Null> 1 NA
0026003710022751 3 32750 3 Match
0026003710022751 3 32750 3 Match
0026003710022751 3 32750 3 Match
ここで使用されるロジックは、中間出力を次SELECT ID, Count(*) FROM MyTable M GROUP BY IIF(IsNull(ID), '0', ID), ID having COUNT(*)>1
のように取得するために使用する繰り返しを持つ ID を最初に見つけることです。
NDUPID TmpCntID
FRY6040501ACH19 3
<Null> 3
0026003710022751 3
ここで、ID の残りの部分を無視する必要があります0026003710022745
。0026003710022752
上記の最初の表から、非重複の検索にID
あるそれぞれについて。1 つの非重複は、同じであるすべての行を示す必要があります。NDUPID (above intermediate output)
values
ID
Mismatch
に対しての例でID=0026003710022751
は、3つすべてを見ることができvalues=32750
、したがってStatus=Match
、およびID=FRY6040501ACH19
、ID=<Null>
少なくとも1つの重複がvalue
あるため、Status=Mismatch
上記の出力テーブルではTmpCntID=1
、 を持つすべての行について、Status=NA
念頭に置いているロジックはTmpCntVl
、TmpCntID
最初に を計算することですが、最終出力では必要ありません。次に、両方の列が等しい場合は case ステートメントを使用し、両方の列が等しくMatch
ない場合は、上記の中間出力テーブルにないMisMatch
すべてのID
's に対して、つまりステータスはcount(*)<=1
NA
どうぞよろしくお願いいたします。