#sql #sql-server-2008 #sql-server-2008-r2 #ssms
#sql #sql-server-2008 #sql-server-2008-r2 #ssms
Вопрос:
Я создал SQL-запрос, который упорядочивает все строки таблицы определенным образом.
Вопрос: Как я могу получить номер строки (индекс?) Определенной строки в таком динамически создаваемом списке?
Заранее спасибо.
Комментарии:
1. Что вы хотите сделать с номером x-й строки? Если вам просто нужен индекс строки, используйте
row_number() over (order by field1, field2, ...)
.
Ответ №1:
SELECT Row_NUMBER() OVER (ORDER BY <your criteria>) as RowIndex, other fields
FROM MyTable
Обновить:
Чтобы добавить это в качестве поля, вы можете сделать:
UPDATE T
SET T.Indexfield = X.RowIndex
FROM MyTable T
INNER JOIN (SELECT Row_NUMBER() OVER (ORDER BY <your criteria>) as RowIndex, other fields
FROM MyTable) as X
ON X.<field> = T.<Field>
Комментарии:
1. Похоже, это не сработало, пока я не добавил круглые скобки в ROW_NUMBER (-> ROW_NUMBER()). Спасибо. Как бы мне выполнить цикл по строкам списка и, например, присвоить этот новый индекс в качестве значения столбцу этой строки?
2. @Acidic — см. Редактирование. Я думаю, что синтаксис обновления допустим, но вам может потребоваться изменить порядок
3. Что
FROM MyTable T
должно означать? Кажется, я не могу понять это или заставить его работать. Является ли это попыткой передать ссылку на таблицу переменной T?4. Это псевдокод. вам нужно, знаете ли, ввести реальные имена таблиц и полей.