2011-01-07 95 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