我有一个看起来像这样的表:
SetId ID Premium
2012 5 Y
2012 6 Y
2013 5 N
2013 6 N
Run Code Online (Sandbox Code Playgroud)
我想用setid等于2012的溢价值更新2013年的记录.
所以在查询之后它看起来像这样:
SetId ID Premium
2012 5 Y
2012 6 Y
2013 5 Y
2013 6 Y
Run Code Online (Sandbox Code Playgroud)
任何帮助非常感谢
Chr*_*ver 39
目前尚不清楚您想用哪个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
Run Code Online (Sandbox Code Playgroud)
Tim*_*ter 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
Run Code Online (Sandbox Code Playgroud)
我认为这是正确的解决方案:
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
Run Code Online (Sandbox Code Playgroud)
小智 5
我们可以从 self 表更新表,如下所示:
update TABLE_A
set TABLE_A.Col1=B.Col2
from TABLE_A B
Run Code Online (Sandbox Code Playgroud)
绝对没有必要去使用s或s 的公认答案所建议的所有那些花哨的长度,或者从同一张表更新时 - 请参阅此处的小提琴!INNER JOIN FROM aliases
CREATE TABLE b (x INT, y INT);\nRun Code Online (Sandbox Code Playgroud)\n\n填充:
\n\nINSERT INTO b (x) VALUES (2), (3), (4);\nRun Code Online (Sandbox Code Playgroud)\n\n查看:
\n\nSELECT * FROM test;\nRun Code Online (Sandbox Code Playgroud)\n\n结果:
\n\nx y\n2 null\n3 null\n4 null\nRun Code Online (Sandbox Code Playgroud)\n\n现在——简单地说:
\n\nUPDATE b SET y = x\nWHERE x <= 3;\nRun Code Online (Sandbox Code Playgroud)\n\n然后:
\n\nSELECT * FROM b;\nRun Code Online (Sandbox Code Playgroud)\n\n结果:
\n\nx y\n2 2\n3 3\n4 null\nRun Code Online (Sandbox Code Playgroud)\n\net voil\xc3\xa0 - 非常简单!Antoine de Saint-Exup\xc3\xa9ry 是对的:
\n\n\n\n\n\xe2\x80\x9cLa 完美 est atteinte,不 pas lorsqu\'il n\'ya plus rien \xc3\xa0\n ajouter,mais lorsqu\'il n\'ya plus rien \xc3\xa0 退休者。\xe2\ x80\x9d
\n
\n\n完美的实现,不是在没有什么可以添加的时候,而是在没有什么可以删除的时候。
\n