2008-09-23 5 views
1

Я пишу запрос в SQL Server2005. Это возвращает мне дубликаты строк в результате. Могу ли я устранить это дублирование с определенным столбцом в качестве ключа?Duplicate result

ответ

9

Вы можете удалить полные повторяющиеся строки, используя ключевое слово DISTINCT. Если есть какой-то ключевой столбец, который является дубликатом, но остальные столбцы нет, тогда вам придется использовать агрегатные функции и предложение GROUP BY, чтобы объяснить SQL Server, какие данные вы хотите вернуть.

0

Возможно, ваш результат содержит ассоциативный и числовой массив.

6

SELECT DISTINCT устранит повторяющиеся строки.

0

Если вы просто хотите один столбец:

SELECT DISTINCT MyColumn FROM MyTable; 

Если вы хотите, различные колонны, возможно, возвращается максимум или сумму, попробуйте сгруппировать его:

SELECT MyFirstColumn, MySecondColumn, MAX(SomeDate) AS MaxDate, SUM(Amount) AS TotalAmount 
FROM MyTable 
GROUP BY MyFirstColumn, MySecondColumn; 
+0

Несколько столбцов с четкими должны быть в порядке. Пока агрегированные операции не нужны. – 2008-09-23 08:54:20

3

Вы можете использовать SELECT DISTINCT для устранения дубликатов, как это было рекомендовано в других комментариях, и на данный момент это может работать достаточно хорошо, но вы можете попросить о будущих проблемах. Слишком часто, если вы не можете получить уникальный результат без SELECT DISTINCT, ваша модель базы данных была денормализована слишком далеко, и ваши запросы могут быть увязшими, извлекая и удаляя большое количество дубликатов. (Однако, конечно, нормализация существующей схемы базы данных редко бывает тривиальной ...)

Без дополнительной информации о схеме и запросе невозможно определить, является ли приемлемым обходным решением SELECT DISTINCT, или простое соединение заявление.

0

Как вы отметили в комментариях, вы используете хранимую процедуру. Один из способов обработки этого случая - создать временную таблицу, которую вы заполняете, используя хранимую процедуру. Затем выберите результаты из временной таблицы и обрезайте дубликаты с помощью SELECT DISTINCT или GROUP BY.