nullif 関数を使用した case ステートメントがあります...
case when itm>0 then itm else nullif(vnd||':','0:')||sty end
vnd が null の場合、他の部分が実行されているときはいつでも、0 に過ぎません。vnd が存在する場合は、vnd と sty の両方の値を「:」で連結する必要があります。
あなたの質問を完全に理解しているかどうかはわかりませんが、これであなたが探しているものに近づくことができますか?
DECLARE @itm VARCHAR(10), @sty VARCHAR(10), @vnd VARCHAR(10)
SET @itm = '0'
SET @sty = '2'
SET @vnd = '3'
SELECT
case
when @itm>0 then @itm
WHEN @itm <= 0 THEN ISNULL(@vnd, 0) + ':' + ISNULL(@sty, '0')
END
ここで何が必要なのか、実際にはわかりません。アイデアはあると思いますが、明確にする必要があります。vnd が null の場合、sty フィールドを取得していないということですか?
そうであれば、DB2 は意図したとおりに動作しています。これは、NULL 値を別のものに連結しても NULL が返されるためです。
CASE
WHEN itm > 0 THEN itm
WHEN (vnd IS NULL OR vnd = 0) THEN sty
ELSE vnd || ':' || sty
END