Не уверен, как использовать Decode, NVL и / или isNull (или что-то еще?) В этой ситуации - PullRequest
2 голосов
/ 13 мая 2010

У меня есть таблица заказов для определенных продуктов и таблица продуктов, которые продаются. (Это не идеальная структура базы данных, но это вне моего контроля.) То, что я хочу сделать, - это внешнее присоединение таблицы заказов к таблице продаж по номеру продукта, но я не хочу включать какие-либо конкретные данные из таблицы продаж, Я просто хочу Y, если объединение существует, или N, если его нет в выводе. Может кто-нибудь объяснить, как я могу сделать это в SQL?

Заранее спасибо!

Ответы [ 3 ]

4 голосов
/ 13 мая 2010

Вы должны иметь возможность использовать конструкцию 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;
2 голосов
/ 14 мая 2010

Я обычно использую 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
0 голосов
/ 13 мая 2010

Попробуйте (не проверено):

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', что будет сравнивать значение 'X' в DECODE, генерируя N; ненулевые номера продуктов будут числом, не равным «X», и, следовательно, будут генерировать «Y».

...