У меня есть временная таблица с несколькими не различимыми записями клиентов, и я хочу обновить один и тот же столбец во всех строках для одного и того же адреса электронной почты, если они имеют существующее значение:
CustomerID | Email | Pref1 | Pref2 | Pref3
-----------------------------------------------------
1234 email1@domain.com 1 0 0
1235 email1@domain.com 1 1 0
1236 email1@domain.com 0 0 1
1237 email2@domain.com 0 0 0
1238 email2@domain.com 1 0 0
Должно стать:
CustomerID | Email | Pref1 | Pref2 | Pref3
-----------------------------------------------------
1234 email1@domain.com 1 1 1
1235 email1@domain.com 1 1 1
1236 email1@domain.com 1 1 1
1237 email2@domain.com 1 0 0
1238 email2@domain.com 1 0 0
В настоящее время у меня есть цикл while (цикл по строкам, которые еще не обновлены), который содержит внутренний курсор для циклического перемещения по столбцам, которые я хочу обновить (Pref1, Pref2, Pref3 и т. Д.). Это работает, но всегда требует большего набора записей.
Как я могу изменить ниже:
UPDATE #table
SET Pref1 =
(
SELECT MAX(IsNull(Pref1,0))
FROM #table
WHERE Email = 'email1@domain.com'
)
WHERE Email = 'email1@domain.com'
чтобы вместо каждого адреса электронной почты указывать адрес электронной почты обновляемой записи?
UPDATE #table
SET Pref1 =
(
SELECT MAX(IsNull(Pref1,0))
FROM #table
WHERE Email = #table.email
)
(Приведенный выше запрос не работает, он просто обновляет весь этот столбец для всех записей до 1, если он существует в этом столбце). Должен ли я использовать какое-то обновление соединения?