zoukankan      html  css  js  c++  java
  • SQLSERVER如何在子查询中使用ORDER BY

    今天在使用公司的一个pager接口的时候,需要传递一个查询的SQL语句,因为我希望他能够在pager对他查询出来的结果排序之前自己先进行排序,

    于是在这个SQL中添加了ORDER BY,但是得到的结果是这么个异常:

    除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。

    这个异常信息已经说的很清楚了,要解决这个问题只能指定TOP,可是这个变态的接口需要的是没有TOP条数的SQL,怎么办呢?

    当时想啊,思路有两个: 

    1.查询的时候加一个ROW_NUMBER,这样就能达到查询出的结果是按自己的意愿排序的啦。

      事实证明这样是可行的,需要的语句是这样的:select ROW_NUMBER() over(order by name) as rn,* from Movie;

    2.还是添加TOP,但是要TOP所有的记录条数。

      这个有个难点,怎么获得所有的记录条数呢?

      在查阅资料的时候发现了一个写了这么写年的SQL却从来没用过,也没听人提起过,学习SQL时也未曾发现的好东东啊

      TOP 100 PERCENT

      当然也可以是其他的百分比,不过这个100 PERCENT, 正好解决了我的问题。

      于是我的SQL可以是这样的:select top 100 percent * from Movie order by name;

    总结:这样就有两个知识点了

       1.子查询中不能有ORDER BY, 除非指定了TOP;

       2.TOP后面可以跟百分比,如:TOP 35 PERCENT;

      

     转载注明出处:http://www.cnblogs.com/wancy86/archive/2013/05/27/TOP100PERCENT.html

  • 相关阅读:
    Volatile关键字
    ThreadPoolExecutor线程池基本原理及使用
    HashMap线程不安全源码解析(1.7 + 1.8)
    SpringBoot+ajax+formData实现图片上传和回显
    BloomFilter
    POST和GET
    快手电话面试
    Apache SSI 远程命令执行漏洞
    SYSTEM--服务器提权
    封神台靶场练习(2)
  • 原文地址:https://www.cnblogs.com/cat-fish6/p/10277864.html
Copyright © 2011-2022 走看看