Иметь таблицу с несколькими повторяющимися строками, хотел бы нумеровать их последовательно для каждого идентификатора - PullRequest
0 голосов
/ 04 октября 2019

У меня есть пользовательская таблица с несколькими повторяющимися строками в общем формате:

ID,  Val
ID1, Value
ID1, Value2
ID2, Value3
ID2, Value4

Хотелось бы создать оператор обновления для обновления столбца SeqNo, чтобы он выглядел так:

ID,  Val,    SeqNo
ID1, Value,  1
ID1, Value2, 2
ID2, Value3, 3
ID2, Value4, 4

Таблица уже заполнена, и столбец создан.

Попытка использовать номер строки над разделом, я думаю, что это даст решение, но возникнут проблемы с синтаксисом.

Ответы [ 3 ]

0 голосов
/ 04 октября 2019

Похоже, вам нужен обновляемый CTE с оконной функцией:

with toupdate as (
      select t.*, row_number() over (order by id, val) as seqnum
      from t
     )
update toupdate
    set seqno = seqnum;
0 голосов
/ 04 октября 2019

Проверьте это -

IF OBJECT_ID('TEMPDB..#SampleTable') IS NOT NULL 
    DROP TABLE #SampleTable

Create table #SampleTable 
(
ID varchar(5),
Val varchar(10),
SeqNo INT
)

insert into #SampleTable(ID,Val) 
values 
('ID1','Value'),
('ID1','Value2'),
('ID2','Value3'),
('ID2','Value4')

UPDATE T SET T.SeqNo=A.SeqNo
FROM #SampleTable T INNER JOIN 
(
    select ID,Val,row_number() over (order by ID,Val) as SeqNo 
    from #SampleTable
) A ON T.ID=A.ID AND T.Val=A.Val

SELECT * FROM #SampleTable
0 голосов
/ 04 октября 2019

Найден хороший учебник по использованию ROW_NUMBER () OVER (PARTITION BY ...)

Я добавил следующую строку в свой оператор выбора, используемый для заполнения таблицы:

ROW_NUMBER ()более (разделить по порядку идентификатора по дате)

http://www.sqlservertutorial.net/sql-server-window-functions/sql-server-row_number-function/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...