SELECT *
FROM My table A
ORDER BY ROW_NUMBER() OVER(ORDER BY 1)
使用此获取错误时 窗口函数和NEXT VALUE FOR函数不支持整数索引作为ORDER BY子句表达式。
我如何才能使它发挥作用。
TIA
答案 0 :(得分:7)
您的查询毫无意义。您实际上并没有在外部查询中指定order by
条件,所以为什么要这么麻烦?
也许你想要添加一个"行号"输出值。如果是,那么row_number()
属于select
,而不属于order by
:
SELECT A.*, ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM Mytable A;
SQL Server不允许ORDER BY
中的常量值 - 在窗口函数或ORDER BY
子句中。 SELECT NULL
子查询是解决这个问题的一种方法。通常,ORDER BY
中的整数表达式是一个索引,指的是要排序的列。这适用于ORDER BY
子句,但不适用于窗口函数。 SQL Server也拒绝其他常量。
根据我的经验,这不会产生额外的排序。据我所知,这并没有记录在案。
答案 1 :(得分:0)
这可以改写为:
SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS RN
FROM [My table] AS A
ORDER BY RN;
答案 2 :(得分:0)
你不能在order by子句中使用row_number()函数。你可以这样做..
SELECT ROW_NUMBER() OVER(ORDER BY 1) as Rno, * FROM My table A order by rno
或
with cte as
(
SELECT ROW_NUMBER() OVER(ORDER BY 1) as Rno, * FROM My table A
)
select * from cte ORDER BY Rno
答案 3 :(得分:0)
试试这个:
SELECT *,ROW_NUMBER() OVER(ORDER BY (SELECT 1)) as RN
FROM My_table_A
ORDER BY RN;