Пронумеровать записи. Пример для MSSQL 2005

| рубрика: Программирование | автор: st
Метки:

Как пронумеровать записи в таблице в одном ее поле по порядку следования другого поля. Пример для MSSQL 2005.

Пример с использованием документированных функций, нумерация в заданном порядке.

UPDATE table1
SET field1 = T2.rownum
FROM table1 T1 INNER JOIN
    (SELECT ROW_NUMBER() OVER (ORDER BY field2 ASC) AS rownum, field2
        FROM table1
    ) T2
    ON T1.field2 = T2.field2

То же с использованием CTE

WITH x AS (
    SELECT ROW_NUMBER() OVER (ORDER BY field2 ASC) AS rownum, *
    FROM table1
)
UPDATE x
SET field1 = rownum

Пример с "хаком", нумерация в физическом порядке следования строк.

DECLARE @n integer = 1;
UPDATE table1
SET field1 = @n, @n = @n + 1;

Порядок нумерации дубликатов не определен, как правило это будет физическое следование записей.

Тестовый пример:

CREATE TABLE table1 (
  field1 int,
  field2 nvarchar(255)
)
GO
INSERT INTO table1 (field2)
SELECT 'Value 1'
UNION
SELECT 'Value 2'
UNION
SELECT 'Value 3'
UNION ALL
SELECT 'Value 3'
GO

UPDATE table1
SET field1 = T2.rownum
FROM table1 T1 INNER JOIN
    (SELECT ROW_NUMBER() OVER (ORDER BY field2 ASC) AS rownum, field2
        FROM table1
    ) T2
    ON T1.field2 = T2.field2

GO
SELECT * FROM table1
GO
DROP TABLE table1
GO

Результат:

field1      field2
----------- ------------
1           Value 1
2           Value 2
3           Value 3
4           Value 3