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
Любая помощь очень ценится
Ответы
Ответ 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