Подтвердить что ты не робот

Вручную укажите начальное значение для Row_Number()

Я хочу определить начало ROW_NUMBER() как 3258170 вместо 1.

Я использую следующий SQL-запрос

SELECT ROW_NUMBER() over(order by (select 3258170))  as 'idd'.

Однако указанный выше запрос не работает. Когда я говорю не работает, я имею в виду его выполнение, но оно не начинается с 3258170. Может кто-нибудь мне помочь?

Причина, по которой я хочу указать номер строки, - это вставка строк из одной таблицы в другую. В первой таблице последний номер строки записи 3258169, и когда я вставляю новые записи, я хочу, чтобы они имели номер строки из 3258170.

4b9b3361

Ответ 1

Просто добавьте значение к результату row_number():

select 3258170 - 1 + row_number() over (order by (select NULL)) as idd

Предложение order by row_number() указывает, какой столбец используется для заказа. Указав там константу, вы просто говорите: "все имеет то же значение для целей заказа". Он не имеет ничего, ничего общего с первым выбранным значением.

Чтобы избежать путаницы, я заменил постоянное значение на NULL. В SQL Server я заметил, что это назначает последовательный номер без фактической сортировки строк - наблюдаемое преимущество производительности, но не то, что я видел задокументированным, поэтому мы не можем зависеть от него.

Ответ 2

Я чувствую, что это проще

ROW_NUMBER() OVER(ORDER BY Field) - 1 AS FieldAlias (To start from 0)
ROW_NUMBER() OVER(ORDER BY Field) + 3258169 AS FieldAlias (To start from 3258170)

Ответ 3

Иногда....

ROW_NUMBER() может быть не лучшим решением, особенно если в базовом наборе данных могут быть дубликаты записей (для запросов JOIN и т.д.). Это может привести к возврату большего количества строк, чем ожидалось. Вы можете рассмотреть возможность создания SEQUENCE, который в некоторых случаях может рассматриваться как более чистое решение. то есть:.

CREATE SEQUENCE myRowNumberId  
    START WITH 1  
    INCREMENT BY 1 
GO  

SELECT NEXT VALUE FOR myRowNumberId  AS 'idd' -- your query
GO

DROP SEQUENCE myRowNumberId; -- just to clean-up after ourselves
GO

Недостатком является то, что последовательности могут быть сложными в сложных запросах с функциями DISTINCT, WINDOW и т.д. См. полную документацию последовательности здесь.