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

    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

  • 相关阅读:
    我眼中的DevOps
    Jenkins常用插件介绍之权限控制插件Role-based Authorization Strategy
    sql查询一个班级中总共有多少人以及男女分别多少人
    win8 图片等路径
    WPF 设置TextBox为空时,背景为文字提示。
    WCF服务发布
    win8 摄像
    oracle 删除主键
    oracle 数据库连接
    oracle 创建用户表
  • 原文地址:https://www.cnblogs.com/wancy86/p/TOP100PERCENT.html
Copyright © 2011-2022 走看看