Включить результаты, но исключить данные в запросе SQL - PullRequest
0 голосов
/ 09 июня 2018

У меня есть таблица (Oracle):

customer_quote
------
int id
int part_key (fk)
int condition_code (fk)
number unit_price
int qty_quoted
date entry_date

С запросом, который выбирает данные за прошлый год:

SELECT cq.part_key 
    , cq.condition_code 
    , COUNT(*) AS cq_count 
    , SUM(cq.unit_price * cq.qty_quoted) AS cq_total 
    , SUM(cq.qty_quoted) cq_qty
FROM customer_quote cq 
WHERE cq.entry_date > TO_DATE('09-Jun-2017', 'dd-mm-yyyy')
GROUP BY cq.part_key 
    , cq.condition_code 

Но мне нужны данные, чтобы включить детали с деятельностьюза последние два года, но данные старше 1 года не должны учитываться при подсчете.Таким образом, детали без данных за последний год должны отображаться в результатах, но иметь итоговые значения 0, 0, 0, например:

44814   45  25  20114.1 81
41404   45  4   10237   50
31823   45  4   1050.5  17
25380   49  0   (null)  (null)
58791   46  0   (null)  (null)
13012   45  0   (null)  (null)

Как мне это сделать?

1 Ответ

0 голосов
/ 09 июня 2018

Вы можете использовать case внутри sum:

SUM(CASE WHEN cq.entry_date > add_months(sysdate, -12)
         THEN cq.unit_price * cq.qty_quoted END) AS cq_total 

Если нет совпадения с предложением when и без else, case возвращает nullsum игнорирует null, поэтому приведенный выше фрагмент суммирует только значения за прошлый год.

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