摘自:SQL2000-Help生成合计作为附加的汇总列出现在结果集的最后。当与 BY 一起使用时,COMPUTE 子句在结果集内生成控制中断和分类汇总。可在同一查询内指定 COMPUTE BY 和 COMPUTE。语法
[ 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(*) 生成的汇总信息,请使用不带 BY 的 COMPUTE 子句。这些函数忽略空值。如果是用 COPPUT 子句指定的行聚合函数,则不允许它们使用 DISTINCT 关键字。当添加或平均整数数据时,即使列的数据类型为 smallint 或 tinyint,SQL Server 也将结果视为 int 值。有关返回添加数据或平均数据的类型的更多信息,请参见 SUM 和 AVG。说明  为减少在 ODBC 和 DB-Library 程序中溢出错误的可能性,请将平均或汇总结果的所有变量声明均作为数据类型 int。
( expression )表达式,如对其执行计算的列名。expression 必须出现在选择列表中,并且必须将其指定为与选择列表中的某个表达式完全一样。在 expression 内不能使用在选择列表中指定的列的别名。说明  在 COMPUTE 或 COMPUTE BY 子句中,不能指定 ntext、text 和 image 数据类型。
BY expression在结果集内生成控制中断和分类汇总。expression 是 order_by_expression 在相关 ORDER BY 子句中的精确复本。一般情况下,这是列名或列的别名。可指定多个表达式。在 BY 后列出多个表达式可将一个组分成子组并在每个分组级别上应用聚合函数。如果使用 COMPUTE BY,则必须也使用 ORDER BY 子句。表达式必须与在 QRDER BY 后列出的子句相同或是其子集,并且必须按相同的序列。例如,如果 ORDER BY 子句是:ORDER BY a, b, c则 COMPUTE子句可以是下面的任意一个(或全部):COMPUTE BY a, b, c
COMPUTE BY a, b
COMPUTE BY a说明  在带 COMPUTE 子句的 SELECT 语句中,选择列表中的列顺序替代 COMPUTE 子句中的聚合函数顺序。ODBC 和 DB-library 程序员必须知道这种顺序要求,以将聚合函数结果放在正确的位置。
由于包含 COMPUTE 的语句生成表并且这些表的汇总结果不存储在数据库中,因此在 SELECT INTO 语句中不能使用 COMPUTE。因而,任何由 COMPUTE 生成的计算结果不出现在用 SELECT INTO 语句创建的新表内。当 SELECT 语句是 DECLARE CURSOR 语句的一部分时,不能使用 COMPUTE 子句。

解决方案 »

  1.   

    COMPUTE 生成的结果集
    COMPUTE 所生成的汇总值在查询结果中显示为分离的结果集。包括 COMPUTE 子句的查询的结果类似于控制中断报表,即汇总值由指定的组(或称中断)控制的报表。可以为各组生成汇总值,也可以对同一组计算多个聚合函数。当 COMPUTE 带有可选的 BY 子句时,符合 SELECT 条件的每个组都有两个结果集: 每个组的第一个结果集是明细行集,其中包含该组的选择列表信息。
    每个组的第二个结果集有一行,其中包含该组的 COMPUTE 子句中所指定的聚合函数的小计。 
    当 COMPUTE 不带可选的 BY 子句时,SELECT 语句有两个结果集: 每个组的第一个结果集是包含选择列表信息的所有明细行。
    第二个结果集有一行,其中包含 COMPUTE 子句中所指定的聚合函数的合计。 
    COMPUTE 用法示例
    下列 SELECT 语句使用简单 COMPUTE 子句生成 titles 表中 price 及 advance 的求和总计:USE pubs
    SELECT type, price, advance
    FROM titles
    ORDER BY type
    COMPUTE SUM(price), SUM(advance)下列查询在 COMPUTE 子句中加入可选的 BY 关键字,以生成每个组的小计:USE pubs
    SELECT type, price, advance
    FROM titles
    ORDER BY type
    COMPUTE SUM(price), SUM(advance) BY type此 SELECT 语句的结果用 12 个结果集返回,六个组中的每个组都有两个结果集。每个组的第一个结果集是一个行集,其中包含选择列表中所请求的信息。每个组的第二个结果集包含 COMPUTE 子句中两个 SUM 函数的小计。说明  一些实用工具(如 osql)显示多个小计或合计聚合汇总的方式可能会使用户以为每个小计都是结果集中的单独一行。这是由于该实用工具设置输出格式的方式;小计或合计聚合返回时单独占用一行。其它应用程序(如 SQL 查询分析器)将多个聚合设置在同一行。