使用相同的column2更新column1

时间:2011-10-11 16:48:00

标签: sql sql-server-2008

我有这个:

ID    Num
1     KP2
2     KP3
3     KP2
4     KP3
5     KP3

我需要得到这个:

   ID    Num
    1     KP2
    2     KP3
    1     KP2
    2     KP3
    2     KP3

我试过了:

  UPDATE t
  SET ID = t2.ID
  FROM table t JOIN table t2 ON t.Num = t2.Num

但这不起作用。没有什么是变化它说行已更新,但IDS仍然是相同的。

4 个答案:

答案 0 :(得分:1)

这个怎么样:

UPDATE t
SET ID = (SELECT MIN(ID) FROM t AS t2 WHERE t.Num = t2.Num)

话虽如此,名称“ID”有点暗示主键。你确定这是你想要的吗?

答案 1 :(得分:1)

SQLMenace's answer类似,但避免使用JOIN

;WITH T
     AS (SELECT *,
                dense_rank() OVER(ORDER BY num) AS Number
         FROM  YourTable)
UPDATE T
SET    id = Number

答案 2 :(得分:0)

使用窗口函数的一种方法

UPDATE t
 SET t.id =x.number
 FROM (SELECT num,dense_rank() OVER(ORDER BY num) AS Number
 FROM table) x
 JOIN table t ON t.num = x.num

例如你可以运行

CREATE TABLE #test (id INT, num VARCHAR(100))
INSERT #test VALUES(1,'KP2')
INSERT #test VALUES(2,'KP3')
INSERT #test VALUES(3,'KP2')
INSERT #test VALUES(4,'KP3')
INSERT #test VALUES(5,'KP3')



 UPDATE t
 SET t.id =x.number
 FROM (SELECT num,dense_rank() OVER(ORDER BY num) AS Number
 FROM #test) x
 JOIN #test t ON t.num = x.num

 SELECT * FROM #test



1   KP2
2   KP3
1   KP2
2   KP3
2   KP3

答案 3 :(得分:-1)

试试这个:

 UPDATE t   
 SET ID = t2.ID   
 FROM table t 
 JOIN (select min(ID), num from table group by num)t2 
    ON t.Num = t2.Num