|
Секция ORDER BY
В процессе выборки данные возвращаются в порядке их нахождения SQL Server. Ключевое слово ORDER BY позволяет отменить такое поведение и определить порядок возвращения записей. Конкретный порядок зависит от системного порядка сортировки. Результат можно сортировать по нескольким столбцам, однако общая длина данных во всех сортируемых столбцах должна быть меньше 8060 байт. Если превысить этот порог, запрос не будет работать.
Столбцы, определяющие порядок записей, могут указываться с помощью заголовков столбцов, имен столбцов (даже если они отсутствуют в списке выборки) и целых чисел, определяющих порядок столбцов в списке выборки.
Ключевые слова ASC и DESC определяют порядок сортировки (по возрастанию или по убыванию). По умолчанию данные сортируются по возрастанию. Ключевые слова ASC и DESC относятся лишь к одному столбцу. Приведем пример команды SELECT с секцией ORDER BY:
SELECT au_lname FROM authors ORDER BY au_fname ASC
Команда возвращает все значения au_lname из таблицы authors. Результат сортируется по возрастанию столбца au_fname (не включенного в список выборки).
COMPUTE
Расширения TSQL COMPUTE и COMPUTE BY позволяют включить в итоговый набор запроса SQL и основные, и сводные данные. COMPUTE и COMPUTE BY выполняют агрегатные функции (агрегатные функции подробно рассматриваются в следующем разделе) для вычисления общих и промежуточных итогов:
COMPUTE агрегатная_функция(выражение)
[,агрегатная_функция(выражение) ...]
COMPUTE агрегатная_функция(выражение)
[,агрегатная_функция(выражение) ...]
BY список_столбцов
При использовании COMPUTE BY все столбцы списка должны присутствовать в секции ORDER BY в том же порядке. Столбцы нельзя пропускать, однако вы не обязаны использовать все столбцы из секции ORDER BY. Например, если в список секции ORDER BY входят столбцы LastName, FirstName и Zip, то секция COMPUTE BY может содержать LastName, или LastName и FirstName, или LastName, FirstName и Zip.
Выражения в секциях COMPUTE и COMPUTE BY должны совпадать с выражениями списка выборки. Например, если в COMPUTE используется выражение price*2, оно также должно присутствовать в выражении SELECT. Может показаться, что вы используете агрегатную функцию для агрегатной функции, что обычно не разрешается.
Следующий фрагмент демонстрирует применение секции COMPUTE:
SELECT type, SUM(price) FROM titles
GROUP BY type
COMPUTE AVG(SUM(price))
Команда возвращает type и SUM(price) для значений type в таблице titles. Она создает завершающую запись, для которой выполняется секция COMPUTE; эта запись содержит среднее арифметическое всех сумм price.
ВАЖНО!
В секции COMPUTE нельзя использовать псевдонимы столбцов. Если вы попытаетесь это сделать, SQL Server выдаст сообщение о синтаксической ошибке.
|