Пронумеровать записи. Пример для MSSQL 2005
Как пронумеровать записи в таблице в одном ее поле по порядку следования другого поля. Пример для 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
blog comments powered by Disqus