转载原文地址http://www.cnblogs.com/pumaboyd/archive/2008/04/20/1162376.html

这周碰到了很多奇怪的问题,有些是莫名的低级错误,有些这是一直以来未发现的错误。其中这个RowNumber()这个问题就是这样。

敬德兄写的底层负责自动生成T-SQL。当我需求对数据DISTINCT的时候就发现RowNuber() 和DISTINCT是有冲突的。

WITH ListOrder AS
(SELECT DISTINCT A.*,ROW_NUMBER() AS RowNumber FROM MyList A INNER JOIN MyListShop B ON A.ListID =B.ListID)
SELECT TOP 20 *  FROM ListOrder WHERE RowNumber > 80

这个效果是明显不能排除DISTINCT的,因为 RowNumber这一列已经永远不会相同了。

这样就面临两个问题,第一我改变T-SQL,第二或者敬德更改通用的底层。

两种我们想过的实现方法我都记录一下:

T-SQL改进(不一定适合所有的业务):

EXISITS(SELECT * FROM MyListShop WHERE ShopID= @ShopID)

(PS:敬德认为我原来的JOIN方式不合理,改用上面的EXISITS方式,更合理,我保留意见。但就目前的底层结构,如果要DISTINCT也只能EXISISTS方式)

通用底层改进(指定具体的DISTINCT列就可以了):

WITH ListOrder AS
(SELECT A.*,ROW_NUMBER() OVER (ORDER BY A.ListID) AS RowNumber FROM MyList A INNER JOIN MyListShop B ON A.ListID =B.ListID)
SELECT DISTINCT TOP 10 ListID,Title FROM ListOrder WHERE RowNumber > 20

看下来你可能会觉得不清楚,这是因为我省略了很多关于我们底层的实现。这里主要为了说明一个问题,就是在使用Row_Number()写通用分页方法时,应该考虑DISTINCT的问题。因为我发现网上很多写Row_Number分页的情况都没考虑这点,难道大家就都没碰到这个问题,还是大家都没有去实践。

mssql Row_Number() 分页 DISTINCT 问题的更多相关文章

  1. 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题

    最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...

  2. ROW_NUMBER分页的注意事项

    之前在使用ROW_NUMBER分页获取数据的时候,直接用ROW_NUMBER里的SELECT语句查出了所有的数据. like this: select * from ( select row_numb ...

  3. MSSQL row_number简单使用语法

    MSSQL row_number简单使用语法 select * from ( select row_number() over(partition by threadid order by date ...

  4. 使用Row_Number()分页优化

    记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题   最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且 ...

  5. SQL Server的分页优化及Row_Number()分页存在的问题

    最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...

  6. 【转】记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题

      最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServe ...

  7. sql server row_number分页

    row_number分页 SELECT  TOP 10* --pageSize =10FROM (  SELECT    *, row_number () OVER (ORDER BY a.bsqID ...

  8. 存储过程 Row_number() 分页

    ---恢复内容开始--- 自己之前一直是使用的通用的存储过程 ,也是封装好的只要传表名 + 条件 等等 来到新环境 让自己写一个存储过程, 没办法 自己就需要写一个咯 之前写的比较多的是 按 top ...

  9. sql 排序函数ROW_NUMBER分页返回数据

    分页从数据库返回一张表的某些条数据 假设我需要查询 系统表 sys.all_columns中的数据,每次查询10条 第一次查询第1-10条数据 第二次查询第11-20条数据 第三次查询第21-30条数 ...

随机推荐

  1. python之jsonpath的使用

    import json import jsonpath import requests url="https://www.lagou.com/lbs/getAllCitySearchLabe ...

  2. android 动态改变控件位置和大小 .

    动态改变控件位置的方法: setPadding()的方法更改布局位置. 如我要把Imageview下移200px:             ImageView.setPadding( ImageVie ...

  3. 修改vs17中的cordova模板

    因为visual studio 2017创建的默认cordova-ios的版本自动编译带有swift语言的插件会出现异常,cordova-ios升级到4.3.1,并且配置build.json能解决问题 ...

  4. c++鼠标点点,获取坐标值,放入到txt文件中

    // oj3.cpp : Defines the entry point for the console application.// #include "stdafx.h"#in ...

  5. C# Winform频繁刷新导致界面闪烁解决方法

    C#Winform频繁刷新导致界面闪烁解决方法 一.通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET Framework 提供的默认双缓冲将 ...

  6. 数据分析python应用到的ggplot

    数据分析中应用到python中的ggplot库,可以用来画图 数据之类的用优达学院中课程七中的数据为例 数据是:https://s3.amazonaws.com/content.udacity-dat ...

  7. javscript练习(三)

    编写一个函数,计算两个数字的和差积商 function calculator(num1,num2,sign){          switch(sign){                   cas ...

  8. CoreOS中随着系统启动Docker Container

    Start containers automatically https://docs.docker.com/engine/admin/host_integration/ https://www.fr ...

  9. poj3414 Pots(BFS)

    题目链接 http://poj.org/problem?id=3414 题意 有两个杯子,容量分别为A升,B升,可以向杯子里倒满水,将杯子里的水倒空,将一个杯子里的水倒到另一个杯子里,求怎样倒才能使其 ...

  10. JavaScript中变量、作用域、内存问题

    这几天,闲的没事看看JavaScript高级编程,感觉JavaScript真的很强大,尤其是采用面向对象的编程方式. 一.   基本类型和引用类型的值: ECMAScript变量可能包含两种不同数据类 ...