У меня под рукой довольно простая задача SQL, и я хотел бы получить подтверждение (или руководство) для решения, которое придумал. Спасибо за помощь! (это мой первый пост)
Вот проблема, с которой я сталкиваюсь (упрощенно):
Я импортирую информацию о пользователе из простого файла в промежуточную таблицу (используя SSIS). У каждого пользователя будет 2 или 3 записи. Каждая строка будет содержать важные данные. Конечный результат должен составлять 1 запись на каждого клиента, содержащую информацию от всех 3.
Вот пример данных:
PK | Name | UniqueCustID | Info1 | Info2 | Info3 |
----------------------
1 | John Doe | 12345 | Opt1 | NULL | NULL
2 | John Doe | 12345 | NULL | Opt2 | NULL
3 | John Doe | 12345 | NULL | NULL | Opt3
Окончательный результат должен быть примерно таким:
PK | Name | UniqueCustID | Info1 | Info2 | Info3 |
----------------------
1 | John Doe | 12345 | Opt1 | Opt2 | Opt3
Я стараюсь сделать это как можно проще. Я хочу справиться с этим с помощью базовой задачи «Выполнение SQL» в службах SSIS (или пары). Каковы реакции людей на скачок? Могу ли я предоставить дополнительную информацию? Еще раз спасибо.
ОБНОВЛЕНИЕ - Чтобы показать двухэтапный процесс, который я пытаюсь:
1) Это должно привести в соответствие все отдельные наборы клиентов:
WITH CustInfoTMP (UniqueCustID,Info1,Info2,Info3)
AS
(
SELECT UniqueCustID,MAX(Info1),MAX(Info2),MAX(Info3)
FROM CustStaging
GROUP BY UniqueCustID
)
UPDATE CustStaging
SET
CustStaging.Info1 = CustInfoTMP.Info1
CustStaging.Info2 = CustInfoTMP.Info2
CustStaging.Info3 = CustInfoTMP.Info3
FROM CustStaging
INNER JOIN CustStagingTMP ON CustStaging.UniqueCustID = CustStagingTMP.UniqueCustID
2) Затем я использую это для удаления дублирующихся записей:
DELETE
FROM CustStaging
WHERE UniqueCustID NOT IN
(
SELECT MAX(PK)
FROM CustStaging
GROUP BY UniqueCustID
)
Я надеюсь, что все следуют этому. Я действительно ценю обратную связь.