Получение динамического индекса строк

#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. Это псевдокод. вам нужно, знаете ли, ввести реальные имена таблиц и полей.