2016-07-01 8 views
2

2つの異なるデータソースから結合した郵便番号と地域のリストがあります。重複がある場合は、別の列に基づいて値を選択してください。

私の列は次のようになります。値は次のようになります 郵便番号、領土、ソース

76345, ShiPaTown, Source1 
76345, ShiPaTown, Source2 
12110, South Park, Source1 
12110, Mars, Source2 

は、私の目的は、唯一のユニークな郵便番号ごとにとの記録があるかどうONE行を持つことですBOTH Source1とSource2の郵便番号は、常にSource1からテリトリーを取得します。

だから、前のリストはに減少になるだろう:これは、優先順位付けクエリです

76345, ShiPaTown 
12110, SouthPark 

答えて

3

。ここで一つのアプローチは、次のとおりです。

zipcodeごとに2つのまたは1つのレコードのいずれかが、あなたが次のクエリを使用することができますがあると仮定すると、
select zip, town 
from t 
where source = 'source1' 
union all 
select zip, town 
from t 
where source = 'source2' and 
     not exists (select 1 from t as t2 where t2.zip = t.zip and t2.source = 'source1'); 
2

:各ソースの郵便番号が一意である場合

SELECT t1.zipcode, 
     IIF(ISNULL(t2.territory), t1.territory, t2.territory) AS territory, 
     IIF(ISNULL(t2.source), t1.source, t2.source) AS source 
FROM mytable AS t1 
LEFT JOIN (
    SELECT zipcode, territory, source 
    FROM mytable 
    WHERE source = 'Source1') AS t2 ON t1.zipcode = t2.zipcode 
WHERE t1.source <> 'Source1' 

Demo here

+0

こんにちはGiorgos、残念ながらAccessはCoalesce関数をサポートしていません – ChrisG

+1

'IIF(ISNULL(t2.territory)、t1.territory、t2.territory)' – shawnt00

+0

@ shawnt00修正をありがとうございます。 –

1

を(いずれかのソースに重複はありませんが、重複する可能性はありますが)、データを再結合するためにオープンしているので、ソース1からテーブルを作成し、zipをプライマリキー(ダンプは許可されません)にして、ソース2からデータを追加します。これは手作業による回避策ですが、わずか2秒ですそれはおそらく実行可能です。

関連する問題