selec * from (select top 20 * from (select top 100 * from Concentrator order by 序号 asc) order by 序号 desc) order by 序号 asc
这个的代码的基础设想是,先搜索表中前100行,然后把这100行倒序,得到第81-100行的数据,但是此时是逆排的,再把这个结果按升序排一次,结果提示这个语句是无效的

解决方案 »

  1.   

    select * from 
    (select top 20 * from 
    (select top 100 * from Concentrator order by 序号 asc) a
    order by 序号 desc)a order by 序号 as
    要加别名
      

  2.   

    帮你格式化SELECT  *
     FROM    ( SELECT TOP 20
                         *
               FROM      ( SELECT TOP 100
                                     *
                           FROM      Concentrator
                           ORDER BY  序号 ASC
                         ) a
               ORDER BY  序号 DESC
             ) a
     ORDER BY 序号 ASC
      

  3.   

    select * from (select top 20 * from (select top 100 * from BS_EMPL order by SID asc) as a order by SID desc) as a order by SID asc缺少 as a需要给子查询取个别名
      

  4.   

    楼上两位谢谢,确实是缺少别名的原因,但是为啥需要别名呢?貌似如果我不需要最终结果再次排序的话,只有两层嵌套的话,不用别名也能工作,别名用在这的意义是什么,还是说 ms的sql约定了多层嵌套必须用别名?
      

  5.   

    因为比如你执行select getdate()的时候,可以看到结果里面是没有别名的,那么当你把这个放到一个嵌套里面的时候,SQLServer就不知道怎么去调用这个东西了,SQLServer要找到一个明确的名字才能用。所以对select和嵌套的东西,显式添加别名是良好的编程规范,且可以减少很多不必要的错误。
      

  6.   


    select嵌套查询,加别名是一个规则,就相当于外层  从内层的查询结果列 中再进行查询