2016-07-14 2 views
0

Привет здесь есть запрос, где я получаю данные из оракулаКак добавить месяцев в запросе на выборку

Select EXTRACT(YEAR FROM A.date_applied) Year, 
     EXTRACT(Month FROM A.date_applied) Month, 
     round(sum(nvl(decode(A.direction,'+',(A.quantity-a.qty_reversed)*A.cost),0))) Value 
From INVENTORY_TRANSACTION_HIST2 a 
group by EXTRACT(Month FROM A.date_applied), 
     EXTRACT(YEAR FROM A.date_applied) 
order by EXTRACT(Year FROM A.date_applied); 

ВЫВОД:

enter image description here

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

Если в течение месяца нет данных, он должен добавить месяц и отобразить вывод как 0 из что месяц

+0

Пожалуйста, попробуйте лучше формат, который вы кода; Кроме того, вы пропустили вывод. Пожалуйста, посмотрите, как построить [mcve] – Aleksej

+0

Вам действительно нужно хотя бы показать нам текущий вывод. Я не думаю, что ваш вопрос в настоящее время подотчетен даже Гордону Линоффу. –

+0

Вы уже обрабатываете значения «NULL» с помощью «NVL», поэтому я бы предположил, что ваша фактическая проблема заключается в том, что определенные месяцы полностью отсутствуют. –

ответ

1

Используйте PARTITION OUTER JOIN:

SELECT i.year, 
     m.month, 
     NVL(i.value, 0) AS value 
FROM (SELECT LEVEL AS month 
     FROM DUAL CONNECT BY LEVEL <= 12 
     ) m 
     LEFT OUTER JOIN 
     (SELECT EXTRACT(YEAR FROM date_applied) AS year, 
       EXTRACT(MONTH FROM date_applied) AS month, 
       ROUND(SUM(
        NVL(DECODE(direction, '+', (quantity-qty_reversed)*cost)), 0) 
       )) AS value 
     FROM INVENTORY_TRANSACTION_HIST2 
     GROUP BY EXTRACT(YEAR FROM date_applied), 
       EXTRACT(MONTH FROM date_applied) 
     ) i 
     PARTITION BY (i.year, m.month) 
     ON (i.month = m.month) 
ORDER BY i.year, m.month; 
+0

Эй, он работает отлично, только с одной небольшой модификацией в PARTITIONBY i удалил месяц –

Смежные вопросы