COMPUTE (Transact-SQL)
Формирует итоги, которые появляются в дополнительном столбце сводки в конце результирующего набора. При использовании с ключевым словом BY предложение COMPUTE формирует в результирующем наборе сегменты и промежуточные итоги. В одном запросе можно указать одновременно COMPUTE BY и COMPUTE.
Важно! |
---|
В следующей версии Microsoft SQL Server эта возможность будет удалена. Не используйте ее при работе над новыми приложениями и как можно быстрее измените приложения, в которых она в настоящее время используется.Вместо этого используйте инструкцию ROLLUP. Дополнительные сведения см. в разделе GROUP BY (Transact-SQL). |
Синтаксис
[ COMPUTE
{ { AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM }
( expression ) } [ ,...n ]
[ BY expression [ ,...n ] ]
]
Аргументы
AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM
Указывает агрегат для выполнения. В предложении COMPUTE используются следующие агрегатные функции для строк.Агрегатная функция для строк
Результат
AVG
Среднее значение в числовом выражении
COUNT
Количество выбранных строк
MAX
Наибольшее значение в выражении
MIN
Наименьшее значение в выражении
STDEV
Статистическое стандартное отклонение для всех значений выражения
STDEVP
Статистическое стандартное отклонение для заполнения по всем значениям выражения
SUM
Сумма значений в числовом выражении
VAR
Статистическая дисперсия для всех значений выражения
VARP
Статистическая дисперсия для заполнения по всем значениям выражения
Эквивалента функции COUNT(*) нет. Для нахождения сводных сведений, полученных при помощи предложений GROUP BY и COUNT(*), используйте предложение COMPUTE без ключевого слова BY.
Эти функции не учитывает значения NULL.
Ключевое слово DISTINCT не применимо с агрегатными функциями для строк, определенными в предложении COMPUTE.
При сложении или нахождении среднего значения целочисленных данных компонент SQL Server Database Engine рассматривает результат как значение типа int, даже если в столбце содержатся данные типов smallint или tinyint. Дополнительные сведения о типах возвращаемых данных операций сложения или нахождения среднего значения см. в разделах SUM (Transact-SQL) и AVG (Transact-SQL).
Примечание Для уменьшения вероятности возникновения ошибки переполнения в программах, использующих протокол ODBC или DB-Library, сделайте int типом всех переменных, объявленных для результатов сложения или нахождения среднего значения.
expression
Выражение Выражения (Transact-SQL), такое, как имя столбца, над которым выполняется вычисление. Аргумент expression должен присутствовать в списке выбора и быть указан идентично одному из выражений в списке выбора. Псевдоним столбца, определенный в списке выбора, не может быть использован в аргументе expression.Примечание Типы данных ntext, text или image не могут быть указаны в предложении COMPUTE или COMPUTE BY.
BY expression
Формирует сегменты и промежуточные итоги в результирующем наборе. Аргумент expression идентичен выражению order_by_expression в связанном предложении ORDER BY. Обычно это имя или псевдоним столбца. Можно указать несколько выражений. При перечислении нескольких выражений после ключевого слова BY группа разбивается на подгруппы, а агрегатные функции применяются к каждому уровню группирования.При использовании предложения COMPUTE BY необходимо также использовать предложение ORDER BY. Выражения должны быть такими же, как в предложении ORDER BY, или быть их подмножеством. Располагаться они должны в той же последовательности. Например, если предложением ORDER BY является ORDER BY a, b, c,предложение COMPUTE может быть любым из следующих:
COMPUTE BY a, b, c COMPUTE BY a, b COMPUTE BY a
Примечание В инструкции SELECT с предложением COMPUTE порядок столбцов в списке выбора переопределяет порядок агрегатных функций в предложении COMPUTE. Программисты, использующие протоколы ODBC и DB-Library, должны знать об этом требовании к порядку расположения результатов агрегатных функций в правильном месте.
Использовать предложение COMPUTE в инструкции SELECT INTO нельзя, потому что инструкции, включающие предложение COMPUTE, формируют таблицы и их итоговые результаты не сохраняются в базе данных. Таким образом, любые вычисления, производимые в предложении COMPUTE, не появляются в новой таблице, созданной с помощью инструкции SELECT INTO.
Предложение COMPUTE нельзя использовать, если инструкция SELECT является частью инструкции DECLARE CURSOR.
Примеры
А. Использование предложения COMPUTE в запросе для возвращения итогов
В следующем примере инструкция SELECT использует простое предложение COMPUTE для формирования основной итоговой суммы по столбцам SubTotal и TotalDue из таблицы SalesOrderHeader.
USE AdventureWorks2008R2;
GO
SELECT CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
WHERE SalesPersonID = 35
ORDER BY OrderDate
COMPUTE SUM(SubTotal), SUM(TotalDue);
Б. Использование предложения COMPUTE в запросе для возвращения итогов
В следующем примере инструкция SELECT использует предложение COMPUTE для формирования по каждому менеджеру по продажам итоговой суммы по столбцам SubTotal и TotalDue из таблицы SalesOrderHeader.
USE AdventureWorks2008R2;
GO
SELECT SalesPersonID, CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
ORDER BY SalesPersonID, OrderDate
COMPUTE SUM(SubTotal), SUM(TotalDue) BY SalesPersonID;