COMPUTE (Transact-SQL)
Формирует итоги, которые появляются в дополнительном столбце сводки в конце результирующего набора. При использовании с ключевым словом BY предложение COMPUTE формирует в результирующем наборе сегменты и промежуточные итоги. В одном запросе можно указать одновременно COMPUTE BY и COMPUTE.
Соглашения о синтаксисе в 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.
При сложении или нахождении среднего значения целочисленных данных компонент Microsoft SQL Server 2005 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 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 AdventureWorks;
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 AdventureWorks;
GO
SELECT SalesPersonID, CustomerID, OrderDate, SubTotal, TotalDue
FROM Sales.SalesOrderHeader
ORDER BY SalesPersonID, OrderDate
COMPUTE SUM(SubTotal), SUM(TotalDue) BY SalesPersonID;
См. также
Справочник
SELECT (Transact-SQL)
Предложение ORDER BY (Transact-SQL)