Я пишу запрос в SQL Server2005. Это возвращает мне дубликаты строк в результате. Могу ли я устранить это дублирование с определенным столбцом в качестве ключа?Duplicate result
ответ
Вы можете удалить полные повторяющиеся строки, используя ключевое слово DISTINCT. Если есть какой-то ключевой столбец, который является дубликатом, но остальные столбцы нет, тогда вам придется использовать агрегатные функции и предложение GROUP BY, чтобы объяснить SQL Server, какие данные вы хотите вернуть.
Возможно, ваш результат содержит ассоциативный и числовой массив.
SELECT DISTINCT устранит повторяющиеся строки.
Если вы просто хотите один столбец:
SELECT DISTINCT MyColumn FROM MyTable;
Если вы хотите, различные колонны, возможно, возвращается максимум или сумму, попробуйте сгруппировать его:
SELECT MyFirstColumn, MySecondColumn, MAX(SomeDate) AS MaxDate, SUM(Amount) AS TotalAmount
FROM MyTable
GROUP BY MyFirstColumn, MySecondColumn;
Вы можете использовать SELECT DISTINCT
для устранения дубликатов, как это было рекомендовано в других комментариях, и на данный момент это может работать достаточно хорошо, но вы можете попросить о будущих проблемах. Слишком часто, если вы не можете получить уникальный результат без SELECT DISTINCT
, ваша модель базы данных была денормализована слишком далеко, и ваши запросы могут быть увязшими, извлекая и удаляя большое количество дубликатов. (Однако, конечно, нормализация существующей схемы базы данных редко бывает тривиальной ...)
Без дополнительной информации о схеме и запросе невозможно определить, является ли приемлемым обходным решением SELECT DISTINCT
, или простое соединение заявление.
Как вы отметили в комментариях, вы используете хранимую процедуру. Один из способов обработки этого случая - создать временную таблицу, которую вы заполняете, используя хранимую процедуру. Затем выберите результаты из временной таблицы и обрезайте дубликаты с помощью SELECT DISTINCT или GROUP BY.
Несколько столбцов с четкими должны быть в порядке. Пока агрегированные операции не нужны. – 2008-09-23 08:54:20