首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TSQL Partition by with Order by

TSQL Partition by with Order by
EN

Stack Overflow用户
提问于 2013-10-04 15:33:47
回答 1查看 26.4K关注 0票数 6

我注意到当我使用如下所示的分区时

代码语言:javascript
复制
SELECT
ROW_NUMBER() OVER(PARTITION BY categoryid
ORDER BY unitprice, productid) AS rownum,
categoryid, productid, productname, unitprice
FROM Production.Products;

结果集相应地以正确的分词和顺序返回给我。

这是否意味着我不需要在最后提供Order BY子句来绝对保证我想要的订单?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-04 15:49:50

不是的。

为了保证结果的顺序,您必须使用适用于最外层查询的ORDER BY。其他任何事情都只是巧合。

代码语言:javascript
复制
SELECT
ROW_NUMBER() OVER(PARTITION BY categoryid
ORDER BY unitprice, productid) AS rownum,
categoryid, productid, productname, unitprice
FROM Production.Products
ORDER BY categoryid,unitprice,productid;

ORDER BY有两个角色:

  • 来实际定义另一个特性的工作方式。比方说,在使用TOP或在OVER()分区函数中使用时,情况就是这样。它不需要排序,它只是说“只有当我们认为结果集中的行以特定的顺序出现时,这个定义才有意义-这是我想要使用的”
  • 来规定结果集的排序顺序。如果是作为特定查询一部分的最外层语句上的ORDER BY子句,而不是在子查询、CTE、OVER()分区函数等中,则是这样。

有时,您会发现它同时在两种意义上被使用--当最外层的语句包含TOPOFFSET/FETCH时,它就同时用于这两种目的。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19175734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档