特定の製品の注文のテーブルと、販売中の製品のテーブルがあります。(これは理想的なデータベース構造ではありませんが、私の制御範囲外です。) 私がやりたいのは、注文テーブルを製品番号を使用して販売テーブルに外部結合することですが、販売テーブルからの特定のデータを含めたくありません。結合が存在する場合は Y、出力にない場合は N が必要です。SQLでこれを行う方法を誰か説明できますか?
前もって感謝します!
CASE
コンストラクトを使用できるはずで、次のようになります。
select
order.foo,
case
when sale.argle is null then 'N'
else 'Y'
end
from order
left join sale on order.product_number = sale.product_number;
私は通常、このような状況では NVL2 を使用します...
SELECT col_one
, NVL2( col_one, 'Y', 'N' ) col_one_exists
, col_two
, NVL2( col_two, 'Y', 'N' ) col_two_exists
FROM ( SELECT '12345' col_one
, NULL col_two
FROM dual
)
これを返します:-
COL_ONE COL_ONE_EXISTS COL_TWO COL_TWO_EXISTS
12345 Y N
試してください(未テスト):
SELECT O.*, DECODE(NVL(p.product_num, 'X'), 'X', 'N', 'Y')
FROM Orders AS o LEFT JOIN Products AS p ON o.Product_Num = p.Product_Num
NVL は「p.product_num」のヌルを「X」に変換し、DECODE の「X」と等しいと比較して「N」を生成します。null 以外の製品番号は、'X' と等しくない数値になるため、'Y' が生成されます。