我有这个:
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 :(得分: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