2011-10-11 71 views
2

我有这样的:更新COLUMN1具有相同COLUMN2

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仍然相同。

+0

什么错误你好吗?一个关键的错误也许?我也希望你可能想要更具体的加入。 – Fuser97381

+1

供将来参考;充分解释问题,不要让人们阅读并重读你的例子,以便发现你想要的和问题。 –

回答

1

如何:

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

话虽如此,名称为 “ID” 之类的提示主键。你是肯定这是你想要的吗?通过使用窗函数

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 

例如

-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 
0

一种方法可以运行

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 
1

类似SQLMenace's answer,但避免了JOIN

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