我有一张看起来像这样的表:
SetId ID Premium
2012 5 Y
2012 6 Y
2013 5 N
2013 6 N
我希望使用setid等于2012的溢价值更新2013年记录。
所以在查询之后它看起来像这样:
SetId ID Premium
2012 5 Y
2012 6 Y
2013 5 Y
2013 6 Y
任何帮助非常感谢
答案 0 :(得分:37)
目前尚不清楚您想要使用哪个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
答案 1 :(得分:10)
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
答案 2 :(得分:9)
我认为这是正确的解决方案:
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
答案 3 :(得分:2)
我们可以从自己的表中更新表格,如下:
update TABLE_A
set TABLE_A.Col1=B.Col2
from TABLE_A B
答案 4 :(得分:1)
绝对不需要使用INNER JOIN
s 或 FROM
s 或 aliases
(从同一张表更新时),请参见小提琴here!
CREATE TABLE b (x INT, y INT);
人口:
INSERT INTO b (x) VALUES (2), (3), (4);
检查:
SELECT * FROM test;
结果:
x y
2 null
3 null
4 null
现在-简而言之:
UPDATE b SET y = x
WHERE x <= 3;
然后:
SELECT * FROM b;
结果:
x y
2 2
3 3
4 null
Etvoilà-非常简单! Antoine deSaint-Exupéry是right:
“完美无瑕,无故失利à ajouter,mais lorsqu'il n'y加上rienàretirer。”
完美无缺,不是没有其他可添加的东西,而是 当没有东西可以拿走的时候。