我有一张特定产品的订单表和一张正在销售的产品表。(这不是理想的数据库结构,但这是我无法控制的。)我想要做的是通过产品编号将订单表外部连接到销售表,但我不想包含销售表中的任何特定数据,如果连接存在,我只想要一个 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”;非空产品编号将是一个数字,不等于“X”,因此将生成“Y”。