SQL-запрос, возвращающий значение Null для настоящего значения - PullRequest
1 голос
/ 27 июня 2019

У меня есть таблица SQL, в которой есть столбцы, такие как ITEM_ID, FROM_QUANTITY, TO_QUANTITY, LIST_PRICE.Теперь каждый элемент должен иметь FROM_QUANTITY от 1 до 12 и ноль в FROM_QUANTITY.

Теперь, чтобы проверить, какое количество отсутствует в ITEM в таблице, я написал SQL-запрос, который выведет None, если FROM_QUANTITYтам нет.

Запрос работает, как и ожидалось.Просто у каждого товара также есть нулевое значение в количестве и с ним связана какая-то цена.Но мой запрос показывает значение NULL как прейскурантную цену для него.

Вот мой запрос

with pl as (
      select DISTINCT ITEM_ID, FROM_QUANTITY,TO_QUANTITY, coalesce(to_char(list_price), 'NONE') as list_price
      from PRICELIST_LINE
      where item_id IN ('XYZ') and
            PRICELIST_HDR_KEY in (select Pricelist_Hdr_Key
                              from PRICELIST_HDR
                              where PRICELIST_NAME IN ('ABC') and
                                     SELLER_ORGANIZATION_CODE IN ('100')
                             ) and SYSDATE < END_DATE_ACTIVE
      )
select i.item_id, u.from_quantity, pl.to_quantity,pl.list_price
from (select distinct item_id from pl) i cross join
     (select '1' as from_quantity from dual union all
      select '2' as from_quantity from dual union all
      select '3' as from_quantity from dual union all
      select '4' as from_quantity from dual union all
      select '5' as from_quantity from dual union all
      select '6' as from_quantity from dual union all
      select '7' as from_quantity from dual union all
      select '8' as from_quantity from dual union all
      select '9' as from_quantity from dual union all
      select '10' as from_quantity from dual union all
      select '11' as from_quantity from dual union all
      select '12' as from_quantity from dual union all
      select '' as from_quantity from dual
     ) u left join
     pl
     on pl.item_id = i.item_id and pl.from_quantity = u.from_quantity;

Теперь выходные данные для этого имеют вид:

ITEM_ID FROM_QUANTITY TO_QUANTITY LIST_PRICE
------- ------------- ----------- ----------
ABC                 1           2        100
ABC

Ожидается:

ITEM_ID FROM_QUANTITY TO_QUANTITY LIST_PRICE
------- ------------- ----------- ----------
ABC                 1           2        100
ABC                                      200

1 Ответ

1 голос
/ 27 июня 2019

Использование внешнего соединения с разделами в Oracle должно помочь, например ::

WITH pl AS (SELECT DISTINCT item_id,
                            from_quantity,
                            to_quantity,
                            coalesce(to_char(list_price), 'NONE') AS list_price
            FROM   pricelist_line
            WHERE  item_id IN ('XYZ')
            AND    pricelist_hdr_key IN (SELECT pricelist_hdr_key
                                         FROM   pricelist_hdr
                                         WHERE  pricelist_name IN ('ABC')
                                         AND    seller_organization_code IN ('100'))
            AND    SYSDATE < end_date_active),
    qtys AS (SELECT LEVEL from_quantity
             FROM   dual
             CONNECT BY LEVEL <= 12
             UNION ALL
             SELECT NULL from_quantity
             FROM   dual)
SELECT pl.item_id,
       q.from_quantity,
       pl.to_quantity,
       pl.list_price
FROM   qtys q
       LEFT OUTER JOIN PL PARTITION BY (pl.item_id) ON pl.from_quantity = q.from_quantity
                                                       OR (pl.from_quantity IS NULL AND q.from_quantity IS NULL);

N.B. тестировалась.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...