Добавлено: Работа с SQL Server 2000 и 2005, так что нужно работать на обоих. Кроме того, value_rk не является числом/целым числом (ошибка: уникальный идентификатор типа данных операнда недействителен для оператора min)Выберите один столбец DISTINCT SQL
Есть ли способ сделать один столбец «DISTINCT», когда мне не нужны другие возвращенные столбцы ? Пример:
**Table**
Value A, Value L, Value P
Value A, Value Q, Value Z
Мне нужно вернуть только одну из этих строк на основе того, что находится в первом (значение A). Мне все еще нужны результаты из второго и третьего столбцов (второй должен фактически соответствовать всем по доскам в любом случае, но третий - уникальный ключ, для которого мне нужен хотя бы один из них).
Вот что у меня до сих пор, хотя он не работает, очевидно:
SELECT value, attribute_definition_id, value_rk
FROM attribute_values
WHERE value IN (
SELECT value, max(value_rk)
FROM attribute_values
)
ORDER BY attribute_definition_id
Я работаю в ColdFusion, так что если есть простое решение в том, что я открыт к тому, что, как хорошо , Я пытаюсь ограничить или «группировать по» значение первого столбца. value_rk - моя большая проблема, поскольку каждое значение уникально, но мне нужно только одно.
Примечание: value_rk не является числом, следовательно, это НЕ РАБОТАЕТ
UPDATE: У меня есть рабочий вариант, это, вероятно, совсем немного медленнее, чем чистый SQL версии, но если честно ничего работать в этой точке лучше ничего. Он принимает результаты первого запроса, выполняет второй запрос, кроме ограничения его результатов, и захватывает соответствующее значение_rk для значения, которое соответствует. Нравится так:
<cfquery name="queryBaseValues" datasource="XXX" timeout="999">
SELECT DISTINCT value, attribute_definition_id
FROM attribute_values
ORDER BY attribute_definition_id
</cfquery>
<cfoutput query="queryBaseValues">
<cfquery name="queryRKValue" datasource="XXX">
SELECT TOP 1 value_rk
FROM attribute_values
WHERE value = '#queryBaseValues.value#'
</cfquery>
<cfset resourceKey = queryRKValue.value_rk>
...
Итак, у вас есть это, выбирая один столбец отчетливо в ColdFusion. Любые чистые предложения SQL Server 2000/2005 по-прежнему очень приветствуются :)
Выясняете, что вам нужно? Любая строка, но только одна строка за значение? Строка со значением, которое имеет максимальное значение_rk? Я не уверен, что понимаю, что вы здесь делаете. – tvanfosson 2008-10-30 18:49:10
> ПРИМЕЧАНИЕ: значение_rk не является числом, поэтому это НЕ РАБОТАЕТ. Это не имеет никакого отношения к тому, почему ваш запрос не удается. Вы не упомянули используемую СУБД, но в Oracle вы можете использовать MAX для столбцов символов. – 2008-10-30 18:55:31
MS SQL также может использовать MAX для нечисловых столбцов. – BradC 2008-10-30 18:56:51