表格中有一些重复的行,想为每个ID依次编号

时间:2019-10-03 22:05:17

标签: sql tsql

我有一个自定义表格,其中有一些重复的行,一般格式:

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 :(得分:0)

找到了一个使用ROW_NUMBER()OVER(PARTITION BY ...)的很好的教程

我在用于填充表的select语句中添加了以下行:

ROW_NUMBER()以上(按ID按日期划分ID顺序)

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

答案 1 :(得分:0)

您似乎想要具有窗口功能的可更新CTE:

with toupdate as (
      select t.*, row_number() over (order by id, val) as seqnum
      from t
     )
update toupdate
    set seqno = seqnum;

答案 2 :(得分:0)

检查此-

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