Я должен выбрать главную первую строку из каждого дублирующегося набора записей от таблицы, данной ниже. Я должен использовать этот запрос в поле зрения
никакая временная таблица, поскольку я уже сделал это путем добавления столбца идентификационных данных и минимальной функции и группы. Мне нужно решение без временной таблицы или табличной переменной
Это - просто демонстрационные данные. Исходный имеет 1000-е записей в таблице, и я должен просто следовать из лучших 1000, так не может использовать отличный
Я использую SQL Server 2005
Спасибо.
Ответ зависит от конкретно, что вы подразумеваете под «топ-1000 различными» записями.
Если вы имеете в виду, что вы хотите вернуться с большинства 1000 отдельных записей, независимо от того, сколько дубликатов в таблице, то напишите это:
SELECT DISTINCT TOP 1000 id, uname, tel
FROM Users
ORDER BY <sort_columns>
Если вы хотите только поиск только первые 1000 строк В таблице и потенциально возвращается гораздо менее 1000 различных рядов, то вы бы написали его с подзапросом или CTE, как это:
SELECT DISTINCT *
FROM
(
SELECT TOP 1000 id, uname, tel
FROM Users
ORDER BY <sort_columns>
) u
, конечно, на
, конечно, необязательно, если вам все равно о каких записях вы возвращаетесь.
Использование различных должно сделать это:
SELECT DISTINCT id, uname, tel
FROM YourTable
Хотя вы действительно можете сделать с помощью первичного ключа на эту таблицу, способ однозначно идентифицировать каждую запись. Я бы рассматривал прилипать столбец личности на столе
Не помогает ли SELECT DISTINCT
? Полагаю, это вернет нужный результат.
Ваша лучшая ставка - это исправить дизайн DATBASE и добавить идентификационный столбец к таблице. Почему у вас есть таблица гавани без одного в первую очередь? Особенно один с дублирующимися записями! Очевидно, что сама база данных требуется перепроектирование.
И почему вы должны иметь это с видом, почему ваше решение с таблицей TEMP является действительным решением? Представления обычно не очень хорошая вещь, чтобы сделать с совершенно хорошей базой данных.