Как найти повторяющиеся строки в таблице с помощью sql

#sql-server #sql-server-2005 #sql-server-2008

#sql-сервер #sql-сервер-2005 #sql-сервер-2008 #sql-server-2005

Вопрос:

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

 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, у которого есть дубликаты в этой таблице.

Спасибо

Ответ №1:

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

Ответ №2:

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

 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 — количество.

Ответ №3:

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

 ;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
  

Ссылки:

Ответ №4:

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

Комментарии:

1. если я сгруппирую по первичному ключу, я не получаю никаких записей.

2. Если code_id является первичным ключом, то пара: code_id, line_num не всегда уникальна?

3. если id является вашим первичным ключом, не может быть более одной строки с идентификатором 35712.

4. здесь id может содержать более одной записи, но ba_code_id должен быть первичным ключом.

5. как насчет того, чтобы вы показали нам свое определение таблицы? как и сейчас, вы просто случайным образом предоставляете нам дополнительную информацию о столбцах…