我有一张特定产品的订单表和一张正在销售的产品表。 (这不是理想的数据库结构,但这是我无法控制的。)我想要做的是通过产品编号将订单表外部加入销售表,但我不想在销售表中包含任何特定数据,如果连接存在,我只想要一个Y,如果它不在输出中,我只想要N.任何人都可以解释我如何在SQL中执行此操作吗?
提前致谢!
答案 0 :(得分:4)
您应该能够使用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;
答案 1 :(得分:2)
我在这种情况下非常使用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
答案 2 :(得分:0)
尝试(未经测试):
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';非空产品编号将是一个数字,不等于'X',因此会生成'Y'。