有点棘手的问题我想提供一些建议。我有一个源SQL表,我需要分成两个单独的表。源包含一堆列,包括邮政地址。将SQL数据分成两个表格
我需要做的是将包含任何地址的第一个实例的行添加到第一个表中,然后任何后续出现的相同地址(如果有的话)将被添加到第二个表中,第一个表格中行的ID(用于加入目的)。
任何人都可以建议如何做到这一点?我宁愿将它全部保留在T-SQL(MS SQL Server 2008)中,但如果有必要,我可以将一些C#作为该过程的一部分。
有点棘手的问题我想提供一些建议。我有一个源SQL表,我需要分成两个单独的表。源包含一堆列,包括邮政地址。将SQL数据分成两个表格
我需要做的是将包含任何地址的第一个实例的行添加到第一个表中,然后任何后续出现的相同地址(如果有的话)将被添加到第二个表中,第一个表格中行的ID(用于加入目的)。
任何人都可以建议如何做到这一点?我宁愿将它全部保留在T-SQL(MS SQL Server 2008)中,但如果有必要,我可以将一些C#作为该过程的一部分。
你应该能够创建一个合适的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
的行都是“重复”或附加地址 - 将它们插入到第二个表中。
绝对完美!非常感谢你! – KenD