我注意到当我使用如下所示的分区时
SELECT
ROW_NUMBER() OVER(PARTITION BY categoryid
ORDER BY unitprice, productid) AS rownum,
categoryid, productid, productname, unitprice
FROM Production.Products;结果集相应地以正确的分词和顺序返回给我。
这是否意味着我不需要在最后提供Order BY子句来绝对保证我想要的订单?
谢谢
发布于 2013-10-04 15:49:50
不是的。
为了保证结果的顺序,您必须使用适用于最外层查询的ORDER BY。其他任何事情都只是巧合。
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()分区函数等中,则是这样。有时,您会发现它同时在两种意义上被使用--当最外层的语句包含TOP或OFFSET/FETCH时,它就同时用于这两种目的。
https://stackoverflow.com/questions/19175734
复制相似问题