2016-07-01 9 views
2

Ich habe eine große Liste von Postleitzahlen und Gebieten, die ich aus zwei verschiedenen Datenquellen kombiniert habe.Wenn Duplikate vorhanden sind, wählen Sie den Wert basierend auf einer anderen Spalte

Meine Spalten wie folgt aussehen: zipcode, Gebiet, Quelle

Die Werte aussehen könnte:

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

Mein Ziel nur eine Zeile pro eindeutigem Postleitzahl haben und wenn es ein Rekord für eine Postleitzahl in BEIDE Quelle1 und Quelle2, um immer die Region von Quelle1 zu nehmen.

So ist die vorherige Liste erhalten reduziert würde:

76345, ShiPaTown 
12110, SouthPark 

Antwort

3

Dies ist eine Priorisierung Abfrage. Hier ist ein Ansatz:

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

Angenommen, es sind entweder zwei oder einen Datensatz pro zipcode dann können Sie die folgende Abfrage verwenden:

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

Hallo Giorgos, leider unterstützt Access die Coalesce-Funktion nicht – ChrisG

+1

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

+0

@ shawnt00 Danke für die Korrektur. –

1

Wenn Postleitzahl in jeder Quelle ist einzigartig (keine Duplikate in beiden Quellen, obwohl sie sich überlappen können) und Sie sind bereit, die Daten neu zu konsolidieren, ich würde Ihre Tabelle aus Quelle 1 machen, dann zip zu einem Primärschlüssel machen (keine Duplikate erlaubt), dann die Daten von Quelle 2 anhängen. Es ist eine manuelle Problemumgehung, aber nur für 2 s es ist wahrscheinlich machbar.