【发布时间】:2017-11-30 13:39:05
【问题描述】:
这让我有点发疯。我将解释我的问题的简化版本。我有两个表,源和目标:
CREATE TABLE AMG_TDest(
ID INT,
Value1 INT,
Value2 INT,
Value3 INT,
Value4 INT)
CREATE TABLE AMG_TSource(
ID INT,
RowNumber INT,
Value INT)
INSERT INTO AMG_TDest VALUES (1, 0, 0, 0, 0), (2, 0, 0, 0, 0)
INSERT INTO AMG_TSource VALUES (1, 1, 1), (1, 2, 2), (1, 3, 3), (1, 4, 4), (2, 1, 10), (2, 2, 20), (2, 3, 30), (2, 4, 40)
我想根据 TSource.RowNumber 更新 Destination 表中的 Value1、Value2、Value3 和 Value4。
最后我想要得到的结果是目标表上的这个:
ID V1 V2 V3 V4
1 1 2 3 4
2 10 20 30 40
我试过这个(有一些变化)
UPDATE AMG_TDest
SET
Value1 = CASE WHEN S.RowNumber = 1 THEN COALESCE(S.Value, 0) ELSE Value1 END,
Value2 = CASE WHEN S.RowNumber = 2 THEN COALESCE(S.Value, 0) ELSE Value2 END,
Value3 = CASE WHEN S.RowNumber = 3 THEN COALESCE(S.Value, 0) ELSE Value3 END,
Value4 = CASE WHEN S.RowNumber = 4 THEN COALESCE(S.Value, 0) ELSE Value4 END
FROM ( SELECT * FROM AMG_TSource ) AS S
INNER JOIN AMG_TDest D ON D.ID = S.ID
它只是更新第一行的 Value1 和最后一行的 Value4。我已经为此奋斗了几个小时,但我无法让它发挥作用。如果有人有建议,我真的很感激。
【问题讨论】:
标签: sql-server tsql sql-update