已经装过SQLServer2005SP2-KB921896-x86-CHS.exe了,函数Row_number()不能用,是不是还有其他配置呢?
------解决方案--------------------
因数据库兼容级别低导致列转行查询出错问题的处理
http://blog.csdn.net/claro/archive/2008/12/03/3437828.aspx
------解决方案--------------------
------解决方案--------------------
--接上.
- 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 行受影响)