2014-01-03 6 views
0

Как получить дубликаты записей из таблицы в сочетании с двумя столбцами.Запрос на получение дубликатов записей в SQL Server 2008

Моей Таблица значение:

UserId  ProgramId 
100   1 
100   1 
100   1 
100   2 
101   2 
101   2 
100   3 
101   3 
102   4 
102   4 
103   5 

Желаемых Выходные:

UserId  ProgramId 
100   1 
100   2 
100   3 
101   2 
101   3 

Я попытался ниже запрос, чтобы получить повторяющиеся значения UserId при различном ProgramID в таблице.

SELECT [UserId],[ProgramId],COUNT([UserId]) FROM [Table1] 
GROUP BY [UserId],[ProgramId] 
HAVING COUNT([UserId]) > 1 
order by [UserId] 

Я получаю UserId, ProgramId и графы строк дублирующих, но не указаны для отдельного ProgramId. Какая ошибка в моем запросе ??. Любые предложения будут в основном полезными.

ответ

2

Похоже, вы можете использовать следующий запрос, чтобы получить результат. Это использует CTE для создания списка userids, который имеет несколько отличных programids. После того, как вы есть, что после этого вы можете использовать это, чтобы присоединиться обратно к столу, чтобы получить комбинацию userid и programid:

;with cte as 
(
    select userid 
    from table1 
    group by userid 
    having count(distinct programid) > 1 
) 
select distinct c.userid, t.programid 
from cte c 
inner join table1 t 
    on c.userid = t.userid; 

См SQL Fiddle with Demo

1

Вы рассчитываете на одну из тех же столбцов, которые вы группировки by, это всегда будет один (1).

Попробуйте, как это вместо:

SELECT [UserId],[ProgramId],COUNT(*) 
FROM  [Table1] 
GROUP BY [UserId],[ProgramId] 
HAVING COUNT(*) > 1 
order by [UserId] 

Конечно DISTINCT будет делать то же самое:

SELECT DISTINCT 
     [UserId],[ProgramId] 
FROM  [Table1] 
order by [UserId] 

..since DISTINCT действительно только упрощенный GROUP BY, но это не так расширяемой/редактирования. и поскольку я предполагаю, что вы хотите сделать больше с ним, чем то, что мы видим здесь ...

Смежные вопросы