SQL Server 2014, у меня есть таблица с количеством строк, например 15, 5 имеют столбец groupid 736881 и 10 имеют столбец идентификатора группы 3084235. Что я хочу сделать, это обработать каждую группу записей по очереди изагрузить результаты в таблицу.
Я написал код, чтобы сделать это, но я думаю, что неправильно устанавливаю счетчик циклов, так как я продолжаю загружать groupid записей 736881 дважды.
В настоящее время я не могу опубликоватьтестовые данные содержат личную информацию, но если ошибка не очевидна, я попытаюсь создать фиктивные данные.
SELECT @LoopCounter = min(rowfilter) , @maxrowfilter = max(rowfilter)
FROM peops6
WHILE ( @LoopCounter IS NOT NULL
AND @LoopCounter <= @maxrowfilter)
begin
declare @customer_dist as Table (
[id] [int] NOT NULL,
[First_Name] [varchar](50) NULL,
[Last_Name] [varchar](50) NULL,
[DoB] [date] NULL,
[post_code] [varchar](50) NULL,
[mobile] [varchar](50) NULL,
[Email] [varchar](100) NULL );
INSERT INTO @customer_dist (id, First_Name, Last_Name, DoB, post_code, mobile, Email)
select id, first_name, last_name, dob, postcode, mobile_phone, email from peops6 where rowfilter = @LoopCounter
insert into results
SELECT result.* ,
[dbo].GetPercentageOfTwoStringMatching(result.DoB, d.DoB) [DOB%match] ,
[dbo].GetPercentageOfTwoStringMatching(result.post_code, d.post_code) [post_code%match] ,
[dbo].GetPercentageOfTwoStringMatching(result.mobile, d.mobile) [mobile%match] ,
[dbo].GetPercentageOfTwoStringMatching(result.Email, d.Email) [email%match]
FROM ( SELECT ( SELECT MIN(id)
FROM @customer_dist AS sq
WHERE sq.First_Name = cd.First_Name
AND sq.Last_Name = cd.Last_Name
AND ( sq.DoB = cd.DoB
OR sq.mobile = cd.mobile
OR sq.Email = cd.Email
OR sq.post_code = cd.post_code )) nid ,
*
FROM @customer_dist AS cd ) AS result
INNER JOIN @customer_dist d ON result.nid = d.id order by 1, 2 asc;
SELECT @LoopCounter = min(rowfilter) FROM peops6
WHERE rowfilter > @LoopCounter
end