Итак, у меня есть забавный маленький l oop, который ищет повторяющиеся адреса. Наконец, я настроился, чтобы работать довольно быстро, но я не могу получить от него то, что мне нужно.
Примеры данных и ожидаемые результаты
Вот l oop:
WHILE @cnt <= @max
BEGIN
SELECT
@customer_id=[customer_id],
@add1 =[add1],
@add2 =[add2],
@add3 =[add3],
@zip =[zip]
FROM #tmpCustomers
WHERE [id] = @cnt
-- Ensures customer_id is not already in the dupeCustomerAddress table
IF NOT EXISTS( SELECT [customer_id] FROM dupeCustomerAddress WHERE [customer_id] = @customer_id )
BEGIN
INSERT INTO dupeCustomerAddress
SELECT
[customer_id],
[address1],
[add1],
[address2],
[add2],
[address3],
[add3],
[zip]
FROM [working_customerAddress]
WHERE
-- Removes the Record used for comparison
-- [customer_id] != @customer_id AND
-- Don't need to include records already processed
[customer_id] > @cnt AND
(
( -- Address Line 1 or 2 matches Comparison Line 1 AND Zip matches
(
( [address1] IS NOT NULL AND [add1] = @add1 ) OR
( [address2] IS NOT NULL AND [add2] = @add1 )
) AND [zip] = @zip
)
OR
( -- Address Line 1 or 2 matches Comparison Line 2 AND Zip matches
(
( [address1] IS NOT NULL AND [add1] = @add2 ) OR
( [address2] IS NOT NULL AND [add2] = @add2 )
) AND [zip] = @zip
)
)
GROUP BY customer_id, add1, add2, add3, address1, address2, address3, zip
HAVING COUNT(customer_id) > 1
END
SET @cnt = @cnt + 1
END
Если я удалю GROUP BY
и HAVING
, он вернет каждую строку, поскольку #tmpCustomers - это всего лишь подмножество полей из working_customerAddress. В этом есть смысл.
Если я раскомментирую [customer_id] != @customer_id
, то он предоставит мне только информацию о дублированной записи, а не информацию об исходной записи. Итак, если b и c являются дубликатами a, я получаю только b и c, но мне нужны a, b и c.
Я попытался добавить GROUP BY
и HAVING
, но затем Я вообще не получаю результатов. Все записи должны быть уникальными, так как это всего одна per customer_id
, поэтому GROUP BY
не должно быть проблемой. Может быть, HAVING
не подходит.
Что мне не хватает?
Я использую последнюю версию MS SQL Server и SSMS