2014-11-11 6 views
1

Моих полейПоиск дубликатов строк в SQL Server с помощью нескольких условий

ID | Name | StartTime | EndTime | Date | Description 

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

Я не так знаком с SQL, поэтому я попытался использовать метод this, но есть только одно поле, не соответствующее (как в моем случае) пять.

Моя первая идея состояла в том, чтобы попробовать что-то вроде:

SELECT * 
FROM Table 
order by Name, Date, StartTime, EndTime, Description 

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

ответ

1

Это должно делать то, что вам нужно:

select Name, Date, StartTime, EndTime, Description 
from table 
group by Name, Date, StartTime, EndTime, Description 
having count(*) > 1 
+0

Этот запрос может быть выполнен без использования предложения group by. –

+1

@AnkitBajpai нет, это не может быть написано именно так. Попробуйте этот скрипт: выберите «Имя», «Дата», «Начало», «Конечная точка», «Описание» из (значения (1,1,1,1,1)) x (Имя, Дата, Время начала, Конечная дата, Описание) со счетом (*)> 1 ... Результат Столбец «x.Name» недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY –

1

Этот запрос должен работать для вас:

SELECT ID, Name, StartTime, EndTime, Date, Description 
FROM (
    SELECT 
     ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID, Name, Date, StartTime, EndTime, Description) AS 'IndexNr' 
     , ID 
     , Name 
     , StartTime 
     , EndTime 
     , Date 
     , Description 
    FROM Table) AS ResultSet 
WHERE ResultSet.IndexNr > 1 
-1

Вы можете попробовать это: -

SELECT * 
FROM TAB_NAME 
HAVING COUNT(CONCAT(Name, StartTime, EndTime, Date, Description)) > 1 

Это даст вам все строки, которые повторяются, за исключением, чем ID.

+0

вы не можете использовать «ИМЕТЬ» без «GROUP BY» –

+0

@ t-clausen.dk Я думаю, что запрос является исполняемым, вы должны дать ему попробовать первый. Используется только тогда, когда мы должны вводить агрегатную функцию в cond. Он не имеет отношения к группе по claue. вы должны направить некоторые документы для этого. –

+1

ОК, я имею в виду некоторые документы сейчас. Посмотрите на все другие ответы. Кроме того, ваш синтаксис будет медленным, если он сработает. Если у вас было 2 строки со значениями: null, null, null, 'A' и 'A', null, null, null, они были бы считаны идентичными в этом матче. Вы не можете использовать wildchar eather при использовании группы. Так что все не так. –

1

Попробуйте ниже запрос.

SELECT  Name, Date, StartTime, EndTime, Description 
FROM Table 
GROUP BY Name, Date, StartTime, EndTime, Description 
HAVING  (COUNT(*) > 1) 
Смежные вопросы