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;


  • 相关阅读:
    HDR & Bloom
    Parallax Mapping
    Normal Mapping & Tangent Space
    Gamma校正背后的原理
    内存对齐及其原理
    关于深度值的一些需要说明的点
    帧缓冲(Framebuffer)
    面剔除和深度测试
    工具·MashLab调整网格模型坐标系
    工具·notepad++正则表达式替换文本
  • 原文地址:https://www.cnblogs.com/signheart/p/5b643107a7fef7f302c14311d8bb527f.html
Copyright © 2011-2022 走看看