在这种情况下,不确定如何使用Decode,NVL和/或isNull(或其他?)

时间:2010-05-13 19:40:41

标签: sql oracle decode nvl

我有一张特定产品的订单表和一张正在销售的产品表。 (这不是理想的数据库结构,但这是我无法控制的。)我想要做的是通过产品编号将订单表外部加入销售表,但我不想在销售表中包含任何特定数据,如果连接存在,我只想要一个Y,如果它不在输出中,我只想要N.任何人都可以解释我如何在SQL中执行此操作吗?

提前致谢!

3 个答案:

答案 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'。