为什么在T-SQL中在用compute by 之前 必须 要用 order  by 语句???

解决方案 »

  1.   

    比较compute 和 group by ,区别如下: 1. group by生成单个结果集,每个组都有一个只包含分组依据列和显示该组子聚合的聚合函数的行,选择列表只能包含分组依据列和聚合函数. 2. COMPUTE生成多个结果集,一类结果集包含每个组的明细行,其中包含选择列表中的表达式,另一类结果集包含组的子聚合. 3. 选择列表可包含分组依据列或聚合函数之外的其他表达式;聚合函数在compute 子句中指定,而不是出现在选择列表中.
      

  2.   

    COMPUTE BY后的表达式必须与在 QRDER BY 后列出的子句相同或是其子集,并且顺序必须相同。
    在带有 COMPUTE 子句的 SELECT 语句中,选择列表中的列顺序优于 COMPUTE 子句中的聚合函数顺序。
      

  3.   

    如果使用 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
      

  4.   

    2、compute by 子句的规则:(1)不能将distinct与行统计函数一起使用(2)compute ??? by 子句中 ???出的列必须出现在选择列表中(3)不能在含有compute by 子句的语句中使用select into 子句,因为包括compute 子句的语句会产生不规则的行。(4)如果使用了compute by子句,则必须使用order by 子句, 而且compute by子句中的列必须包含在order by 子句中,并且对列的前后顺序和起始项都要一致(说白了compute by子句中的列必须是order by子句中列表的全部,或者前边的连续几个)。(5)如果compute 省略了 by ,则order by 也可以省略(6)如果compute by 子句包含多列时,会将一个组(第一个列分的组)分成若干个子组(利用后面的列),并对每层子组进行统计。(7)使用多个compute by子句时,会分别按不同的组统计出结果。详细信息还是按照正常的第一个分组方式显示。(8)compute by 子句中可以使用多个统计函数,他们互不影响(9)compute by 子句中可以不包含by ,而只用compute   此时不对前面信息分组,而只对全部信息进行统计。
        看看这个可能对你来说有帮助
      

  5.   

    关键是在T-SQL中,它为什么要这样规定:在compute ...by...语句中必需要用order by 语句 ????????
    之所以这样规定必有深层次的原因,那么是什么原因呢???