如何使用ROW_NUMBER和order by

use*_*634 1 sql sql-server sql-server-2008

SELECT *
FROM My table A
ORDER BY ROW_NUMBER() OVER(ORDER BY 1)
Run Code Online (Sandbox Code Playgroud)

使用此获取错误作为Windowed函数和NEXT VALUE FOR函数时,不支持整数索引作为ORDER BY子句表达式.

我怎样才能让它发挥作用.

TIA

Gor*_*off 7

你的查询毫无意义.你真的没有order by在外部查询中指定一个条件,为什么要这么麻烦?

也许您想在输出中添加"行号"值.如果是这样,那么row_number()属于,而select不是order by:

SELECT A.*, ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM Mytable A;
Run Code Online (Sandbox Code Playgroud)

SQL Server不允许ORDER BY在窗口函数或ORDER BY子句中使用常量值.该SELECT NULL子查询是解决的办法.通常,a中的整数表达式ORDER BY是一个索引,指的是要排序的列.这适用于该ORDER BY子句,但不适用于窗口函数.SQL Server还拒绝其他常量.

根据我的经验,这不会导致额外的排序.据我所知,这并没有记录在案.