如何在SQL中更新相同的数据行?

时间:2014-01-09 09:14:35

标签: sql sql-server sql-update

我在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

我该怎么做?谢谢!

2 个答案:

答案 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详细信息。