Как найти повторяющиеся строки в таблице с помощью sql - PullRequest
0 голосов
/ 07 ноября 2011

Я пробовал этот запрос, чтобы получить дубликаты записей. Но я получаю эту ошибку.

select * from Codes
where id = 35712 and isactive = 1
group by line_num
having count(*) > 1

Я получаю эту ошибку.

Msg 8120, Level 16, State 1, Line 1
Column 'Codes.code_id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

здесь code_id является первичным ключом для этой таблицы.

Кто-нибудь может мне помочь, как получить code_id с дубликатами в этой таблице

Спасибо

Ответы [ 4 ]

4 голосов
/ 07 ноября 2011
select count(line_num), 
       line_num 
from   codes 
where  id = 35712 
       and isactive = 1 
group  by line_num 
having count(line_num) > 1 
2 голосов
/ 08 ноября 2011

Поиск дублированных значений в столбце line_num, где code_id - первичный ключ таблицы кодов.Я не знаю точного определения таблицы, так что это немного догадки.

select c.code_id, c.line_num, t.qt from codes c
join (
    select line_num, count(*) as qt
    from codes
    where id = 35712 and isActive = 1
    group by line_num
    having count(*) > 1
) as t on t.line_num = c.line_num

Первые столбцы возвращают все code_ids, которые имеют повторяющиеся значения в line_num (второй столбец), qt - количество.

1 голос
/ 08 ноября 2011

В SQL Server 2005 и более поздних версиях вы можете использовать совокупные оконные функции:

;WITH counted AS (
  SELECT
    *,
    Cnt = COUNT(*) OVER (PARTITION BY line_num)
  FROM Codes
  WHERE id = 35712
    AND isactive = 1
)
SELECT *
FROM counted
WHERE Cnt > 1

Ссылки:

1 голос
/ 07 ноября 2011
select code_id, line_num, count(*) from Codes 
where id = 35712 and isactive = 1 
group by code_id, line_num
having count(*) > 1
...