私の最初のレコードを持つtable1があります。私はtable2
を持っていて、それはtable1
と同じテーブル構造を含んでいます。 Table2
トランザクションは、table1
の値を更新するために使用されます。私がやろうとしています何を説明するためにSQL Server 2012:更新前にt1.field1値とt2.field1値を比較します。
、私は彼らがnullのときのフィールドにうまく動作します。このコードを持っている:
UPDATE TABLE1
SET FIELD1 = CASE WHEN T1.FIELD1 = '' THEN t2.FIELD1 ELSE T1.FIELD1 END,
FIELD2 = CASE WHEN T1.FIELD2 = '' THEN T2.FIELD2 ELSE T1.FIELD2 END,
FIELD3 = CASE WHEN T1.FIELD3 = '' THEN T2.FIELD3 ELSE T1.FIELD3 END,
FROM TABLE1 T1
JOIN TABLE2 T2 ON T1.COMMONFIELD = T2.COMMONFIELD
GO
しかし、同じことを行う方法はありますが、t2.field1
にt1.field1
値を比較します同じ種類の論理を持つ価値?私は、それぞれが、それは更新前の基準を比較する独自のしているt2.field-n
値にt1.field-n
値を比較できるようにしたい
UPDATE TABLE1
SET FIELD1 = CASE WHEN T1.FIELD1 > t2.field1 THEN t2.FIELD1 ELSE T1.FIELD1 END,
FIELD2 = CASE WHEN T1.FIELD2 < t2.field2 THEN T2.FIELD2 ELSE T1.FIELD2 END,
FIELD3 = CASE WHEN T1.FIELD3 = '' THEN T2.FIELD3 ELSE T1.FIELD3 END,
FROM TABLE1 T1
JOIN TABLE2 T2 ON T1.COMMONFIELD = T2.COMMONFIELD
GO
:これは、類似したコードとコンセプトだろう。このアプローチではない場合、T-SQLを別の方法で使用することは可能ですか?
ありがとうございます!
あなたの質問は理にかなっていません。あなたの最初のクエリは明示的に 'NULL'sを処理しないので、なぜあなたがそれをうまく処理すると思うか分かりません。論理は明確ではありません。サンプルデータと望ましい結果が役立ちます。 –
ありがとうゴードン。あなたは正しいです。スペースを処理します。フォーマットをしていただきありがとうございます。その方法に関する情報はどこにありますか? – user2704985
2番目のクエリで比較ロジックを実行するには、関数 'least()'と 'greatest()'を作成することができます。これらの関数は、SQL Serverではなく、複数のDBMSに存在します。 –