Как ослабить ограничения GROUP BY в SQL Server? - PullRequest
1 голос
/ 22 сентября 2010

Рассмотрим этот запрос:

SELECT F1,F2 FROM TABLE GROUP BY F1

Выбор F1 действителен, но F2 кажется неправильным (в конце концов он может меняться от строки к строке).Однако SQL Server не проверяет какую-либо логику, используемую здесь - например, F2 может зависеть от F1 (например, из-за предложения JOIN).

Я знаю обходные пути, но мой вопрос здесь таков:

Как ослабить ограничение "group by" (напрямую)?

Что-то вроде

RELAX_GROUPBY
SELECT F1,F2 ....

начало редактирования* Пример данных:

F1 | F2
1  | 2
1  | 2

Вывод (после выполнения запроса, указанного выше):

F1 | F2
1  | 2

конец редактирования 1

Примечание: да, я знаю обходные пути - агрегатные функции, создание представления, таблицы на лету и другие (в зависимости от сценария).Я не заинтересован в другом обходном пути.Если вы знаете решение вопроса , пожалуйста, ответьте, большое спасибо.

Ответы [ 3 ]

1 голос
/ 22 сентября 2010

Предполагая, что F2 одинаково для каждого F1 (что и относится к вашему запросу), самый простой способ - сделать что-то вроде

SELECT F1, MAX(F2) AS F2
FROM TABLE
GROUP BY F1

при условии, что F2 - это поле, к которому, конечно, могут быть применены агрегатные функции.

Нет способа расслабить GROUP BY, как вы описываете, за исключением переписывания всего этого. Я знаю, что MySQL делает что-то немного другое (вы можете группировать по одному полю и ВЫБРАТЬ все остальные), но это несовместимо с другими реализациями.

1 голос
/ 22 сентября 2010

, если вы уверены, что F2 зависит от F1, просто добавьте его в группу с помощью (насколько это сложно?):

SELECT F1,F2 FROM TABLE GROUP BY F1, F2

Часть SQL Server «делай, что я имею в виду, а не то, что я кодирую» никогда не будет достаточно хороша, чтобы прочесть твои мысли, рассказать, как сгруппировать столбцы, и он это сделает. В SQL Server нет возможности «ослабить» группу по ограничениям, и я рад.

0 голосов
/ 22 сентября 2010

если вы используете группу, вы должны использовать функцию Aggregate, тогда только она будет работать

например:

SELECT F1,count(F2) FROM TABLE GROUP BY F1
...