2011-01-07 138 views
0

有點棘手的問題我想提供一些建議。我有一個源SQL表,我需要分成兩個單獨的表。源包含一堆列,包括郵政地址。將SQL數據分成兩個表格

我需要做的是將包含任何地址的第一個實例的行添加到第一個表中,然後任何後續出現的相同地址(如果有的話)將被添加到第二個表中,第一個表格中行的ID(用於加入目的)。

任何人都可以建議如何做到這一點?我寧願將它全部保留在T-SQL(MS SQL Server 2008)中,但如果有必要,我可以將一些C#作爲該過程的一部分。

回答

1

你應該能夠創建一個合適的CTE(公用表表達式)來區分這些地址。你沒有提供太多的細節 - 所以我試圖彌補一些專欄和表名 - 根據需要進行調整。

試試這個 - 它會從表中刪除所有重複:

;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 

有了這個CTE,按照列的列表你「分區」你的數據 - 使用那些你需要使用。每個數據分區(例如,由Street,ZipCode,City定義的每個地址)將基於某種順序(您在CTE中定義的 - 我選擇DateLastChange作爲一種可能性)獲得順序編號。

因此,RowNum = 1組成的「第一個」地址組 - 而不是僅僅SELECT (columns) FROM DuplicateAddr,你當然也可以根據該標準做INSERT INTO ....

所有具有RowNum > 1的行都是「重複」或附加地址 - 將它們插入到第二個表中。

+0

絕對完美!非常感謝你! – KenD