#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. как насчет того, чтобы вы показали нам свое определение таблицы? как и сейчас, вы просто случайным образом предоставляете нам дополнительную информацию о столбцах…