本帖最后由 huawenxue 于 2012-11-07 11:09:57 编辑

解决方案 »

  1.   

     select *,len(T)
    from (
    SELECT 城市 ,        ( SELECT    COUNT(*) + 1          FROM      ( SELECT    城市 ,                                SUM(销售数量) AS 数量汇总                      FROM      killsoft.dbo.[手机销售$]                      GROUP BY  城市                    ) E          WHERE     E.数量汇总 > A.数量汇总        ) AS T  FROM   ( SELECT    城市 ,                    SUM(销售数量) AS 数量汇总          FROM      killsoft.dbo.[手机销售$]          GROUP BY  城市        ) A) as TB
      

  2.   

    select *,len(T)
    from(SELECT 城市 ,       
     ( SELECT    COUNT(*) + 1          FROM      ( SELECT    城市 ,                                SUM(销售数量) AS 数量汇总                      FROM      killsoft.dbo.[手机销售$]                      GROUP BY  城市                    ) E          WHERE     E.数量汇总 > A.数量汇总        ) AS T ,         --这个LEN(T)是用来测试的,其他的也不行        LEN(T) FROM   ( SELECT    城市 ,                    SUM(销售数量) AS 数量汇总          FROM      killsoft.dbo.[手机销售$]          GROUP BY  城市        ) A) x      
      

  3.   

    T是在查询中定义的,只有返回结果才有T,结果没有出来前哪来的T,你用了一个不存在的T
      

  4.   

    你复制的好乱哦,那在中间用对T进行操作是不行的吗?比如我上面的LEN(T),为什么呢?
      

  5.   

    嗯,看来EXCEL中的SQL没有SQL SERVER中要求的严格,我就纳闷了,为什么在EXCEL中能返回我要的值呢?两个如那件的内部处理不一样?
      

  6.   

    如果要在原查询中使用T ,就需
    len( SELECT    COUNT(*) + 1          FROM      ( SELECT    城市 ,                                SUM(销售数量) AS 数量汇总                      FROM      killsoft.dbo.[手机销售$]                      GROUP BY  城市                    ) E          WHERE     E.数量汇总 > A.数量汇总        )
      

  7.   

    我觉得应该是内部处理不一样,虽然很多语法是不一样,让我想起来EXCEL中的内存数组这个东西了