CASE
ステートメントは、C#のような言語でswitch
ステートメントのようです。基本的にはif/else
の束を一列に並べるための複合構造です。コメントの1つで述べたように、通常はcase when <first condition> then <result on first condition> when <nth condition> then <result of nth condition> <optional else clause> end
の形式をとります。オプションのelse
句に注意してください。省略された場合、条件の1つを満たさなかった値はnullに設定されます。
あなたの例から、私はあなたがここで何を得ようとしているのかよく分かりません。あなたが配置した両方のパスはD.POQty
にマッピングされ、case文は実際にはの値にマップされている場合にのみ役に立ちます。あなたが望むのは、ヌルの振る舞いだからな。しかし、おそらくケース・ステートメント、または少なくともこの複雑さの1つではありません。
しかし、文を実行するためにコードをどのようにリファクタリングするのかを示すために、私が思いついたのはここにあります。 case文から直接列を更新できるので、サブクエリを削除しました。私はあなたが持っていたコンパウンドケースのステートメントを組み合わせました。なぜなら、それは単純にAND
と一緒に2つの条件を入力しないと追加したものを見ていないからです。もし私があなたが求めていたところに着いていなければ、私に知らせてください。
update t2s -- References which aliased table you intend to update
set POQty = case when D.POQty > [Tab-2 sourcing].OpenQuantity
then D.POQty
when D.POQty < [Tab-2 sourcing].OpenQuantity and D.POQty > [Tab-2 sourcing].AlreadyAlloted
then D.POQty
else null -- This is implied if you leave it off. Just adding it in so that its behavior is clear
end
from DemandPortal D
inner join [Tab-2 sourcing] t2s
on D.PONumber = t2s.PONumber
CASE文のドキュメント:https://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql
希望するロジックを説明してください。明らかに正しく機能していないものから正しいロジックを推論することは容易ではありません! –
'ケースの場合... then ... when ... then ... else ... end'。 'else'部分はオプションです。 – jarlh
"End"キーワードがありません – Anagha