2011-10-11 100 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 
相關問題