我有一组包含数据的表。表格数据如下。
ID | Name | Age
----------------
1 | A | 24
2 | B | 25
3 | C | 30
4 | D | 46
5 | E | 35
6 | F | 26
7 | G | 30
现在,我想要的是更新某些ID的年龄列,以便最终结果如下。
ID | Name | Age
----------------
1 | A | 24
2 | B | 22
3 | C | 35
4 | D | 50
5 | E | 27
6 | F | 26
7 | G | 30
我更新了ID = 2,3,4,5
的行如何通过单个T-SQL查询实现此结果?这只是一个示例表。在实际情况中,它是一个包含超过1500个数据的表,因此它需要花费大量时间来单独更新行。
我找到了解决方案,但我无法将其添加为答案。所以我决定编辑自己的问题并提出答案。有关详细信息,请参阅以下网址:
www.stackoverflow.com/questions/16932526 / ...
UPDATE e
SET age = t.age
FROM table e
JOIN ( VALUES
(1, 26),
(2, 30),
(3, 35) )
t (id, age) ON t.id = e.id
答案 0 :(得分:2)
你应该依靠update statements。现在有很多方法可以达到你想要的效果,例如,你可以看到here。一个简单的例子是:
UPDATE mytable SET
Age= CASE WHEN id=2 THEN 22 WHEN id=3 THEN 35 WHEN id=4 THEN 50 WHEN id=5 THEN 27 END
WHERE id IN (2, 3, 4, 5);
有关案例的更多阅读,请转到here
答案 1 :(得分:1)
BEGIN TRAN
UPDATE mytable SET age=99 WHERE id=2
UPDATE mytable SET age=99 WHERE id=3
UPDATE mytable SET age=99 WHERE id=4
UPDATE mytable SET age=99 WHERE id=5
COMMIT TRAN
看起来“愚蠢”,但这是单一查询。
答案 2 :(得分:1)
以下脚本应该可以解决问题:
UPDATE TABLENAME
SET Age = CASE WHEN Age = 25 THEN 22
WHEN Age = 30 THEN 35
WHEN Age = 46 THEN 50
WHEN Age = 35 THEN 27
END
WHERE ID IN (2,3,4,5)
希望这有帮助
答案 3 :(得分:1)
加入更新将是我的选择:
UPDATE T1
SET T1.AGE = T2.AGE
FROM T1
INNER JOIN (SELECT 2 AS ID, 22 AS AGE UNION
SELECT 3, 35 UNION
SELECT 4, 50 UNION
SELECT 5, 27) AS T2
ON T1.ID = T2.ID
如果他们为您提供了要更新的ID列表和年龄,您可以使用公式轻松生成excel中的内部选择联合并将其放在那里。
希望这有帮助。