Обновить column1 идентичным column2 - PullRequest
2 голосов
/ 11 октября 2011

У меня есть это:

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 ]

1 голос
/ 11 октября 2011

Аналогично ответу SQLMenace , но избегая JOIN

;WITH T
     AS (SELECT *,
                dense_rank() OVER(ORDER BY num) AS Number
         FROM  YourTable)
UPDATE T
SET    id = Number
1 голос
/ 11 октября 2011

Как насчет этого:

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

Сказав это, название "ID" предлагает первичный ключ.Вы уверены это то, что вы хотите?

0 голосов
/ 11 октября 2011

В одну сторону с помощью оконной функции

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
0 голосов
/ 11 октября 2011

Попробуйте это:

 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...