2015-10-08 3 views
0
SELECT * 
FROM My table A 
ORDER BY ROW_NUMBER() OVER(ORDER BY 1) 

При использовании этого получает ошибки как функций оконных и NEXT VALUE FOR функции не поддерживают целочисленные индексы в качестве предложения ORDER BY выражения.Как использовать ROW_NUMBER с заказом по

Как я могу заставить его работать.

ТИА

+0

Как говорит erros: вы не можете использовать номера столбцов в ORDER BY внутри ROW_NUMBER, это работает только на ORDER BY для всего оператора. Вам нужен ROW_NUMBER для каждого отдельного столбца? – Iztoksson

ответ

0

Это можно переписать в виде:

SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS RN 
FROM [My table] AS A 
ORDER BY RN; 
+0

Только что обновил опечатку! –

+0

Не работает ..... – user1844634

+0

Действительно ли ваша таблица «Мой стол»? Если это так, это нужно обернуть в квадратные скобки. Если он все еще не работает, дайте мне знать, что не работает. –

0

вы не можете использовать 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 
0

Попробуйте следующее:

SELECT *,ROW_NUMBER() OVER(ORDER BY (SELECT 1)) as RN 
FROM My_table_A 
ORDER BY RN; 
+0

Не работает ..... – user1844634

+0

@ user1844634: - Вы получаете сообщение об ошибке? Если да, то что? –

+0

Что означает select 1? 1 - номер столбца.? даже я ставлю это 1,2,3,4 .., давая мне тот же результат. Я хочу сортировать таблицу по разным столбцам, указав номер столбца – user1844634

3

Ваш запрос не имеет смысла. Вы действительно не задаете условие 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 также отклоняет другие константы.

По моему опыту, это не приводит к дополнительной сортировке. Насколько мне известно, это не документировано.

Смежные вопросы