2

我有一张特定产品的订单表和一张正在销售的产品表。(这不是理想的数据库结构,但这是我无法控制的。)我想要做的是通过产品编号将订单表外部连接到销售表,但我不想包含销售表中的任何特定数据,如果连接存在,我只想要一个 Y,如果它不在输出中,我只想要一个 N。谁能解释我如何在 SQL 中做到这一点?

提前致谢!

4

3 回答 3

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;
于 2010-05-13T19:51:22.763 回答
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
于 2010-05-14T07:23:54.433 回答
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”。

于 2010-05-13T19:57:50.580 回答