我在SQLserver工作。我有几行完全相同的数据,如下所示:
hm dep num
517 577578 308330148120004
517 577578 308330148120004
517 577578 308330148120004
517 577578 308330148120004
我想用数据的行号更新'hm'部分,如下所示:
hm dep num
1 577578 308330148120004
2 577578 308330148120004
3 577578 308330148120004
4 577578 308330148120004
我该怎么做?谢谢!
答案 0 :(得分:4)
您可以使用可更新的Common Table Expression (CTE)以及ROW_NUMBER()功能:
WITH CTE AS
( SELECT hm,
dep,
num,
RowNumber = ROW_NUMBER() OVER(PARTITION BY dep, num ORDER BY hm)
FROM T
)
UPDATE CTE
SET hm = RowNumber;
<强> Example on SQL Fiddle 强>
这基本上按任意顺序对相同的行进行排名,然后在分配该顺序后将列hm
设置为行号。
答案 1 :(得分:0)
您可以执行以下操作:
SELECT ROW_NUMBER() OVER(PARTITION BY hm ORDER BY hm) AS hm
FROM TableName
我把它写在了我的头顶,所以它可能不是100%。
您可以看到http://technet.microsoft.com/en-us/library/ms186734.aspx了解ROW_NUMBER详细信息。