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).

    ms181708.note(ru-ru,SQL.90).gifПримечание.
    Для уменьшения вероятности возникновения ошибки переполнения в программах, использующих протокол ODBC или DB-Library, сделайте int типом всех переменных, объявленных для результатов сложения или нахождения среднего значения.
  • expression
    Выражение Выражения (Transact-SQL), такое, как имя столбца, над которым выполняется вычисление. Аргумент expression должен присутствовать в списке выбора и быть указан идентично одному из выражений в списке выбора. Псевдоним столбца, определенный в списке выбора, не может быть использован в аргументе expression.

    ms181708.note(ru-ru,SQL.90).gifПримечание.
    Типы данных 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
    
    ms181708.note(ru-ru,SQL.90).gifПримечание.
    В инструкции 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)

Справка и поддержка

Получение помощи по SQL Server 2005