将SQL数据分成两个表

时间:2011-01-07 10:47:44

标签: tsql

有一个稍微棘手的问题,我想要一些建议。我有一个源SQL表,我需要分成两个单独的表。源包含一堆列,包括邮政地址。

我需要做的是将包含任何地址的第一个实例的行添加到第一个表中,然后将相同地址的任何后续出现(如果有的话)添加到第二个表中,另外一个列包含第一个表中行的ID(用于连接目的)。

有人可以建议怎么做吗?我更喜欢将它全部保存在T-SQL(MS SQL Server 2008)中,但如有必要,我可以将一些C#作为整个过程的一部分。

1 个答案:

答案 0 :(得分: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 ....。< / p>

所有带有RowNum > 1的行都是“重复”或其他地址 - 将这些地址插入第二个表格。