Сначала я собираюсь настроить ваш пример, чтобы вы могли проверить его.
CREATE TABLE #example
(
EID INT PRIMARY KEY IDENTITY,
EName VARCHAR(100),
ERole VARCHAR(MAX)
)
INSERT INTO
#example
VALUES
('Nani','SQL'),
('Nani','SQL Developer'),
('Suresh','ASP .Net Developer'),
('Suresh','ASP .Net'),
('Ravi','Sales Force'),
('Ravi','Sales Force developer')
Теперь, если вы хотите удалить дублированную запись по вашим критериям (то же самое имя, те же первые 10 символов в ERole), вы можете использовать это:
WITH grouped_example as (
SELECT
ROW_NUMBER() OVER(PARTITION BY Ename, SUBSTRING(ERole,0,10) ORDER BY ERole DESC) as preserve,
EID
FROM #example
)
DELETE FROM grouped_example where preserve <> 1
Если вы хотите ВЫБЕРИТЬ без дубликатов, вы можете использовать это:
WITH grouped_example as (
SELECT
ROW_NUMBER() OVER(PARTITION BY Ename, SUBSTRING(ERole,0,10) ORDER BY ERole DESC) as preserve,
*
FROM #example
)
SELECT EID,EName,ERole FROM grouped_example where preserve = 1
* Примечание: я использую ORDER BY ERole DESC, чтобы мы оставались с ролью с большим количеством информации (больше символов)
* Примечание 2: вы можете изменить количество символов, которое вам нужно сопоставить, изменив последнее значение SUBSTRING ()