转载原文地址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. openjudge-NOI 2.6-2985 数字组合

    题目链接:http://noi.openjudge.cn/ch0206/2985/ 题解: 跟背包问题有点相似,暂且算背包型DP吧,虽然是一道递推题…… fj表示和为j时的结果,得: 即为j减去每一个 ...

  2. Sublime Text2使用规则

    Sublime Text是我发现的有一好用的编辑器,它不单单只支持 python ,几乎支持目前主流的语言,快捷键丰富,可以极大的提高代码开发效率.Sublime Text 网址:http://www ...

  3. [ python ] 全局和局部作用域变量的引用

    全局与局部变量的引用 (a)locals(b)globals 这里还需要在补充2个关键字一起比较学习,关键字:(c)nonlocal(d)global locals 和 globals locals: ...

  4. 2017百度春招<有趣的排序>

    题目 度度熊有一个N个数的数组,他想将数组从小到大排好序,但是萌萌的度度熊只会下面这个操作:任取数组中的一个数然后将它放置在数组的最后一个位置.问最少操作多少次可以使得数组从小到大有序? #inclu ...

  5. TCP三次链接和四次断开

    经典的三次握手示意图:(#add,“握手”即图中左边到右边的连线)    经典的四次握手关闭图:    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即t ...

  6. vue单文件中scoped样式如何穿透?

    在vue文件中的style标签上,有一个特殊的属性:scoped.当一个style标签拥有scoped属性时,它的CSS样式就只能作用于当前的组件,也就是说,该样式只能适用于当前组件元素.通过该属性, ...

  7. Go语言入门之指针的使用

    指针的使用: package main import "fmt" func zhi(){ a:= var b *int=&a //声明指针并赋值 *b=3 //改变内存地址 ...

  8. centos6.5挂载windows共享的文件夹

    参考:http://www.centoscn.com/CentOS/Intermediate/2014/0318/2619.html http://www.ailab.cn/article/20150 ...

  9. JavaScript 中的原型(总则)

    1. 一切函数都是对象 2. 一切对象都是由函数创建的,所有函数都是由Function创建的,每个函数都是一个Function对象. 3. 对象.__proto__ === 函数.prototype ...

  10. [转]C/C++关于全局变量和局部变量初始化与不初始化的区别

    原文链接:http://www.kingofcoders.com/viewNews.php?type=newsCpp&id=189&number=4836955386 在C语言里,全局 ...