2010-09-04 3 views
3

поиска дубликатов строки с Count NumbersTSQL Поиск дубликатов

Пусть таблица дается

ID Name  Age 
    ----------------- 
    1 Jon  30 
    2 Skeet  30 
    1 Jon  30 
    4 Gravell 30 
    5 NULL  30 
    4 Gravell 30 
    5 NULL  30 
    7 James  40 

выхода (NULL также должен сопоставимую)

ID Name  Age Description 
    ----------------- ----------- 
    1 Jon  30  Found 1 
    1 Jon  30  Found 2 
    4 Gravell 30  Found 1 
    4 Gravell 30  Found 2 
    5 NULL  30  Found 1 
    5 NULL  30  Found 2 
    7 James  40  Found 1 
    2 Skeet  30  Found 1 

Для поиска дубликатов я могу выполнить команду запрос

select ID,Name,Age from tableA group by ID,Name,Age having count(*) >1 

Как сгенерировать описание?

+1

не уверен, я понимаю , Как вы можете получить 1 - Jon - 30 - Найдено 1, а затем 1 Jon - 30 - Найдено 2. Shouldnt 1 - Jon - 30 - Найдено 2 - единственная запись (как ее счет) – RPM1984

ответ

1
SELECT 
    ID, Name, Age, 
    'Found ' + CAST(ROWNUMBER() OVER (PARITION BY Name ORDER BY ID) AS varchar(10)) AS Description 
FROM 
    MyTable 
ORDER BY 
    ID, Description 

Ваш желаемый порядок вывода, по существу, случайным образом на уровне ID/Name

Чтобы найти дубликаты ...

SELECT 
    ID, Name, Age, 'Found ' + Countof AS Description 
FROM 
    (
    SELECT 
     ID, Name, Age, 
     CAST(ROWNUMBER() OVER (PARITION BY Name ORDER BY ID) AS varchar(10)) AS Countof 
    FROM 
     MyTable 
    ) foo 
WHERE 
    Countof > 1 
1

Попробуйте это -

select ID,Name,Age, ('Found ' + cast(count(*) as varchar(5))) as description 
from tableA group by ID,Name,Age having count(*) >1 
Смежные вопросы