Разделение данных SQL на две таблицы - PullRequest
0 голосов
/ 07 января 2011

Есть немного хитрая проблема, на которую я хотел бы дать несколько советов. У меня есть исходная таблица SQL, которую мне нужно разделить на две отдельные таблицы. Источник содержит несколько столбцов, включая почтовый адрес.

Что мне нужно сделать, это добавить строки, содержащие первый экземпляр любого адреса, в первую таблицу. Затем любые последующие вхождения того же адреса (если есть) должны быть добавлены во вторую таблицу с дополнительным столбцом, содержащим Идентификатор строки в первой таблице (для присоединения).

Кто-нибудь может подсказать, как это сделать? Я бы предпочел сохранить все это в T-SQL (MS SQL Server 2008), но при необходимости я могу собрать вместе немного C # как часть процесса.

1 Ответ

1 голос
/ 07 января 2011

Вы должны иметь возможность создать подходящее CTE (Common Table Expression), разделив эти адреса на части. Вы не предоставили много подробностей - поэтому я попытался составить некоторые имена столбцов и таблиц - адаптировать их по мере необходимости.

Попробуйте - это удалит все дубликаты из вашей таблицы:

;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 являются «дублирующими» или дополнительными адресами - вставьте их во вторую таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...