Подтвердить что ты не робот

SQL Server - Обновить столбец из данных в той же таблице

У меня есть таблица, которая выглядит примерно так:

SetId      ID       Premium
2012        5          Y
2012        6          Y
2013        5          N
2013        6          N

Я хочу обновить записи 2013 года с помощью значений премиум-класса, где setid равен 2012.

Итак, после запроса это будет выглядеть так:

SetId      ID       Premium
2012        5          Y
2012        6          Y
2013        5          Y
2013        6          Y

Любая помощь очень ценится

4b9b3361

Ответ 1

Не понятно, какое значение 2012 вы хотите использовать для обновления значения 2013 года, я предположил, что ID должен быть таким же.

Полный пример с использованием табличных переменных, которые вы можете проверить самостоятельно в студии управления.

DECLARE @Tbl TABLE (
    SetId INT,
    Id INT, 
    Premium VARCHAR(1)
)

INSERT INTO @Tbl VALUES (2012, 5, 'Y')
INSERT INTO @Tbl VALUES (2012, 6, 'Y')
INSERT INTO @Tbl VALUES (2013, 5, 'N')
INSERT INTO @Tbl VALUES (2013, 6, 'N')

--Before Update
SELECT * FROM @Tbl 

--Something like this is what you need
UPDATE t 
SET t.Premium = t2.Premium 
FROM @Tbl t 
INNER JOIN @Tbl t2 ON t.Id = t2.Id 
WHERE t2.SetId = 2012 AND t.SetId = 2013

--After Update    
SELECT * FROM @Tbl 

Ответ 2

UPDATE t 
SET t.Premium = (SELECT TOP 1 t2.Premium
                 FROM dbo.TableName t2
                 WHERE t2.SetId = 2012)
FROM dbo.TableName t
WHERE t.SetId = 2013 

Демонстрация

Ответ 3

Я думаю, что это правильное решение:

UPDATE t 
SET t.Premium = (SELECT TOP 1 t2.Premium
                 FROM dbo.TableName t2
                 WHERE t2.SetId = 2012 AND t2.Id = t.ID)
FROM dbo.TableName t
WHERE t.SetId = 2013 

Ответ 4

Мы можем обновить таблицу из собственной таблицы, например:

update TABLE_A 
   set TABLE_A.Col1=B.Col2
  from TABLE_A B