0
これは私を少しナットにしています。私は私の問題の簡略版を説明します。TSQL複数の列をCASEで更新しますが、値に応じて
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に応じて、送信先テーブルに値1、値2、値3とValue4を更新したい:私は2つのテーブル、送信元と送信先を持っています。私は、結果として手に入れたいものを最後に
は、送信先テーブルの上にこのです:
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
それはちょうど最初から値1を更新最後の行から値4を返します。私はこれで何時間も戦ってきました。私はそれを動作させることはできません。誰かが提案を持っているなら、私は本当に感謝しています。ここで
素晴らしい!できます。元のUSPで確認して、パフォーマンス上の問題があるかどうかを確認します。私は多くの列を持っており、それは少しキロメートルです –
私は助けて嬉しいです –