当前位置: 代码迷 >> Sql Server >> 2005 提示'row_number' 不是可以识别的 函数名解决思路
  详细解决方案

2005 提示'row_number' 不是可以识别的 函数名解决思路

热度:298   发布时间:2016-04-27 14:49:53.0
2005 提示'row_number' 不是可以识别的 函数名
已经装过SQLServer2005SP2-KB921896-x86-CHS.exe了,函数Row_number()不能用,是不是还有其他配置呢?

------解决方案--------------------
因数据库兼容级别低导致列转行查询出错问题的处理
http://blog.csdn.net/claro/archive/2008/12/03/3437828.aspx
------解决方案--------------------
引用楼主 lgx0914 的帖子:
已经装过SQLServer2005SP2-KB921896-x86-CHS.exe了,函数Row_number()不能用,是不是还有其他配置呢?

------解决方案--------------------
--接上.

SQL code
-------------------------------------------------DENSE_RANK()说明:返回结果集分区中行的排名,在排名中没有任何间断。行的排名等于所讨论行之前的所有排名数加一。语法:DENSE_RANK () OVER ( [ < partition_by_clause > ] < order_by_clause > )备注:如果有两个或多个行受同一个分区中排名的约束,则每个约束行将接收相同的排名。      例如,如果两位顶尖销售员具有相同的 SalesYTD 值,则他们将并列第一。      接下来 SalesYTD 最高的销售人员排名第二。该排名等于该行之前的所有行数加一。      因此,DENSE_RANK 函数返回的数字没有间断,并且始终具有连续的排名。       整个查询所用的排序顺序确定了各行在结果中的显示顺序。这说明排名第一的行可以不是分区中的第一行。参数:< partition_by_clause > :将 FROM 子句所生成的结果集划分为数个将应用 DENSE_RANK 函数的分区。       < order_by_clause >:确定将 DENSE_RANK 值应用于分区中各行的顺序。返回类型:bigint示例:/*以下示例返回各位置上产品数量的 DENSE_RANK。 */USE AdventureWorks;GOSELECT  i.ProductID, p.Name, i.LocationID, i.Quantity, DENSE_RANK() OVER (PARTITION BY i.LocationID order by i.Quantity) as DENSE_RANKFROM Production.ProductInventory i JOIN Production.Product p ON i.ProductID = p.ProductIDORDER BY Name;GO/*ProductID   Name                                               LocationID Quantity DENSE_RANK----------- -------------------------------------------------- ---------- -------- --------------------1           Adjustable Race                                    1          408      571           Adjustable Race                                    6          324      521           Adjustable Race                                    50         353      82879         All-Purpose Bike Stand                             7          144      34712         AWC Logo Cap                                       7          288      383           BB Ball Bearing                                    50         324      743           BB Ball Bearing                                    6          443      813           BB Ball Bearing                                    1          585      82*/-------------------------------------------------------------------将上面三个函数放在一起计算,更能明显看出各个函数的功能。CREATE TABLE rankorder(orderid INT,qty INT)INSERT rankorder VALUES(30001,10)INSERT rankorder VALUES(10001,10)INSERT rankorder VALUES(10006,10)INSERT rankorder VALUES(40005,10)INSERT rankorder VALUES(30003,15)INSERT rankorder VALUES(30004,20)INSERT rankorder VALUES(20002,20)INSERT rankorder VALUES(20001,20)INSERT rankorder VALUES(10005,30)INSERT rankorder VALUES(30007,30)INSERT rankorder VALUES(40001,40)INSERT rankorder VALUES(30007,30)GO--对一个列qty进行的排序SELECT orderid,qty,       ROW_NUMBER() OVER(ORDER BY qty) AS rownumber,       RANK()       OVER(ORDER BY qty) AS rank,       DENSE_RANK() OVER(ORDER BY qty) AS denserankFROM rankorderORDER BY qty/*orderid     qty         rownumber            rank                 denserank----------- ----------- -------------------- -------------------- --------------------30001       10          1                    1                    110001       10          2                    1                    110006       10          3                    1                    140005       10          4                    1                    130003       15          5                    5                    230004       20          6                    6                    320002       20          7                    6                    320001       20          8                    6                    310005       30          9                    9                    430007       30          10                   9                    430007       30          11                   9                    440001       40          12                   12                   5(12 行受影响)*/ --对两个列qty,orderid进行的排序SELECT orderid,qty,       ROW_NUMBER() OVER(ORDER BY qty,orderid) AS rownumber,       RANK()       OVER(ORDER BY qty,orderid) AS rank,       DENSE_RANK() OVER(ORDER BY qty,orderid) AS denserankFROM rankorderORDER BY qty,orderiddrop table rankorder/*orderid     qty         rownumber            rank                 denserank----------- ----------- -------------------- -------------------- --------------------10001       10          1                    1                    110006       10          2                    2                    230001       10          3                    3                    340005       10          4                    4                    430003       15          5                    5                    520001       20          6                    6                    620002       20          7                    7                    730004       20          8                    8                    810005       30          9                    9                    930007       30          10                   10                   1030007       30          11                   10                   1040001       40          12                   12                   11(12 行受影响)
  相关解决方案