2011-01-07 13 views
0

Ich habe ein etwas kniffliges Problem. Ich hätte gerne einen Ratschlag. Ich habe eine Quell-SQL-Tabelle, die ich in zwei separate Tabellen trennen muss. Die Quelle enthält eine Reihe von Spalten, einschließlich einer Postanschrift.SQL-Daten in zwei Tabellen teilen

Was ich tun muss, ist die Zeilen mit der ersten Instanz einer Adresse zu der ersten Tabelle hinzufügen, dann alle nachfolgenden Vorkommen der gleichen Adresse (falls vorhanden) sind der zweiten Tabelle hinzugefügt werden, mit einer zusätzlichen Spalte enthält die ID der Zeile in der ersten Tabelle (für Joining-Zwecke).

Kann jemand vorschlagen, wie man das macht? Ich würde es vorziehen, alles in T-SQL (MS SQL Server 2008) zu behalten, aber wenn nötig, kann ich einige C# als Teil des Prozesses zusammen klopfen.

Antwort

1

Sie sollten in der Lage sein, einen geeigneten CTE (Common Table Expression) zu erstellen, indem Sie diese Adressen aufteilen. Sie haben nicht viele Details angegeben - also habe ich versucht, einige Spalten- und Tabellennamen zu erstellen - passen Sie diese nach Bedarf an.

die Sie interessieren - es werden alle Dubletten aus Ihrer Tabelle löschen:

;WITH DuplicateAddr AS 
(
    SELECT 
     (list of columns you need), 
     ROW_NUMBER() OVER (PARTITION BY Street,ZipCode,City 
          ORDER BY DateLastChange DESC) 'RowNum' 
    FROM dbo.Addresses 
) 
SELECT (list of columns) 
FROM DuplicateAddr 
WHERE RowNum > 1 
GO 

Mit diesem CTE, Sie „Partition“, um Ihre Daten nach einer Liste von Spalten - diejenigen, die Sie verwenden müssen, verwenden. Jede Datenpartition (z. B. jede durch Street,ZipCode,City definierte Adresse) erhält sequenzielle Nummern basierend auf einer Reihenfolge (die Sie im CTE definieren - ich wählte DateLastChange als eine Möglichkeit).

Also bilden die Zeilen mit RowNum = 1 die Menge der "ersten" Adressen - anstatt nur SELECT (columns) FROM DuplicateAddr, können Sie natürlich auch eine INSERT INTO .... basierend auf diesem Kriterium tun.

Alle Zeilen mit einem RowNum > 1 sind die "doppelte" oder zusätzliche Adressen - fügen Sie diese in Ihre zweite Tabelle ein.

+0

Absolut perfekt! Vielen Dank! – KenD