Использование этой секции приводит к группировке результирующего множества строк по выбранным столбцам. В общем виде выглядит следующим образом:
GROUP BY [ALL] список_столбцов_по_которым_происходит_группировка
[WITH {CUBE | ROLLUP}]
Опция ALL принуждает использовать при формировании групп даже те строки, которые были отброшены в секции WHERE, т.к. не удовлетворяли условию поиска. Однако ALL нельзя использовать с опциями WITH CUBE или WITH ROLLUP, а также при обращении к удаленным таблицам, если используется секция WHERE.
Столбцы, по которым осуществляется группировка, не могут иметь типов данных text, ntext и image. Если опции WITH CUBE или WITH ROLLUP не используются, то количество столбцов ограничивается только их суммарной длиной, которая не должна превышать 8060 байт. Если же опции WITH CUBE или WITH ROLLUP используются, то максимальное количество столбцов, по которым осуществляется группировка, не может превышать 10. Следует отметить, что перечень столбцов, по которым происходит группировка, должен быть полностью включен в select_list секции SELECT, причем использовать символ * становится невозможным.
Опция WITH CUBE для каждой группы генерирует строки, имеющие всевозможные комбинации значений NULL для группообразующих столбцов.
Опция WITH ROLLUP для каждой получаемой группы генерирует значения NULL, таким образом, чтобы были получены наборы строк вида: (c1, c2, …, cn-1, NULL), (c1, c2, …, NULL, NULL), (c1, c2, …, cn-3, NULL, NULL, NULL), …, (NULL, … NULL), где c1, c2, …, cn – имена группообразующих столбцов.
.