Как заполнить отчет, полученный из другого запроса, нулями или нулями - PullRequest
0 голосов
/ 17 декабря 2018

Итак, мне действительно тяжело с отчетом.Мне нужен отчет, сгруппированный по годам.Например, мы хотим показать, сколько автомобилей продается в год.Итак, в отчете есть колонка Year, тип / модель автомобиля и количество.Тем не менее, я также хочу показать строку с нулевым / нулевым значением, поэтому даже когда ни один автомобиль определенного типа не был продан, я хочу, чтобы он показывал строку, но с 0. Проблема в том, что этот запрос основан на большом количествепросмотров, который показывает каждую транзакцию.Итак, мой фактический запрос работает нормально, за исключением того, что он не показывает тип, когда ни один из этого типа не был продан в течение года.Когда я поворачиваю этот отчет с помощью Oracle APEX, он почти работает.Он показывает все типы, но если я фильтрую в год, то они исчезли.

У меня есть все нужные мне годы, но у меня нет данных за этот год.Я беру все данные из нескольких просмотров с учетом специфики продаж.Некоторые модели / типы не продавались в течение нескольких лет, поэтому, когда я запрашиваю отчет, он не отображается, что ожидается.Например:

Что я получаю

//YEAR - MODEL - QUANTITY //  
2018 - MODEL 1 - 300
2018 - MODEL 2 - 12
2017 - MODEL 1 - 12
2017 - MODEL 2 - 33
2017 - MODEL 3 - 22

Что я хочу

//YEAR - MODEL - QUANTITY //
2018 - MODEL 1 - 300
2018 - MODEL 2 - 12
2018 - MODEL 3 - 0
2017 - MODEL 1 - 12
2017 - MODEL 2 - 33
2017 - MODEL 3 - 22

Есть идеи?

1 Ответ

0 голосов
/ 18 декабря 2018

Вы можете вызывать строки и внешнее соединение с ними.

with years as (
  select add_months(date '1980-1-1', (rownum-1)*12) dt 
  from dual 
  connect by level < 5
)
select y.dt, count(e.hiredate) 
from scott.emp e
right outer join years y
on y.dt = trunc(e.hiredate,'yy')
group by y.dt

DT                  COUNT(E.HIREDATE)
------------------- -----------------
01-01-1982 00:00:00                 1
01-01-1983 00:00:00                 0
01-01-1981 00:00:00                10
01-01-1980 00:00:00                 1
...