COMPUTE (Transact-SQL)

Формирует итоги, которые появляются в дополнительном столбце сводки в конце результирующего набора. При использовании с ключевым словом BY предложение COMPUTE формирует в результирующем наборе сегменты и промежуточные итоги. В одном запросе можно указать одновременно COMPUTE BY и COMPUTE.

Важное примечаниеВажно!

В следующей версии Microsoft SQL Server эта возможность будет удалена. Не используйте ее при работе над новыми приложениями и как можно быстрее измените приложения, в которых она в настоящее время используется.Вместо этого используйте инструкцию ROLLUP. Дополнительные сведения см. в разделе GROUP BY (Transact-SQL).

Значок ссылки на разделСинтаксические обозначения в 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;