У меня есть следующий код, который сравнивает String перед ним, чтобы увидеть, соответствуют ли они. Код работает над записями, что есть только 1 или 2 обмана.Удаление дублированных данных в SQL Server 2008
Если есть 3 или более, то текущий код не работает.
Что мне нужно сделать, так это показать старый код как идентификатор этой строки. Новый код должен быть 1-м совпадающим элементом в списке, в примере это будет 131133. Это должен быть новый код для всех элементов, которые соответствуют.
Мне нужен код, который был заменен, чтобы появиться в Deleted code и только код, который был заменен. в примере это должно быть 141439.
Могу ли я достичь этого с помощью моего кода ниже или мне нужно решить его под другим углом?
Заранее спасибо.
;WITH MyCTE AS
(
SELECT *,
ROW_NUMBER()OVER (ORDER BY SortField) AS rn
FROM Aron_Reporting.dbo.Customer_Sort
)
SELECT T1.Forename as Forename, T1.pcode, T1.Surname as Surname,T1.SortField AS T1String,
T2.SortField AS T2String,
T1.IDNO as OldCode,
CASE
WHEN T1.SortField IS NULL OR T1.SortField = ' ' OR T2.SortField = ' ' or T2.SortField IS NULL THEN T1.IDNO
WHEN T1.SortField = T2.SortField THEN T2.IDNO ELSE T1.IDNO END AS NewCode,
CASE
WHEN T1.SortField IS NULL OR T1.SortField = ' ' or T2.SortField = ' ' or T2.SortField IS NULL THEN ' '
WHEN T1.SortField = T2.SortField THEN T2.IDNO ELSE ' ' END AS DeleteCode
FROM MyCTE T1
LEFT JOIN MyCTE T2
ON T1.rn = T2.rn+1
Я думаю, что лучше всего начать с создания демо-версии SQL Fiddle, чтобы мы лучше поняли вашу схему. Тогда мы могли бы попытаться помочь. Было бы также полезно упомянуть ваш предыдущий связанный с этим вопрос. http://stackoverflow.com/questions/26054898/sql-if-record-equals-the-record-before-it –
Извините, я не уверен, что вы подразумеваете под демоверсией SQL Fiddle, как я могу это создать? ура –