我有一个自定义表格,其中有一些重复的行,一般格式:
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
该表已经填充并创建了列。
尝试过在分区上使用行号,我相信这会提供解决方案,但语法有问题。
答案 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