Итак, у меня есть таблица с этими данными:
![Sample data](https://image.ibb.co/b66qb7/table_data.png)
У меня есть этот запрос:
select count(id) "Count",
case id
when 0 then 'Zeroes'
when 1 then 'Ones'
end "Name",
sum(num1) "Num 1",
sum(num2) "Num 2",
sum(num3) "Num 3"
from mytable
where added_date >= :FROM_DT
and added_date <= :TO_DT
group by id;
Когда: FROM_DT - 01 января 2018 года, а TO_DT - 02 января 2018 года, я получаю следующий результат:
![Sample output](https://image.ibb.co/fCEMin/groupby_1.png)
Однако, когда я изменяю: TO_DT на 01-JAN-2018, я получаю следующий результат:
![Sample output](https://image.ibb.co/i9wCpS/groupby_2.png)
Я хочу показать второй ряд с нулями для нулей.
У меня есть запрос, который я не уверен, оптимизирован или нет:
select "Count",
"Name",
NVL("Num 1", 0) "Num 1",
NVL("Num 2", 0) "Num 2",
NVL("Num 3", 0) "Num 3"
from (
select count(id) "Count",
'Ones' "Name",
sum(num1) "Num 1",
sum(num2) "Num 2",
sum(num3) "Num 3"
from mytable
where added_date >= :FROM_DT
and added_date <= :TO_DT
and id = 1
union
select count(id) "Count",
'Zeroes' "Name",
sum(num1) "Num 1",
sum(num2) "Num 2",
sum(num3) "Num 3"
from mytable
where added_date >= :FROM_DT
and added_date <= :TO_DT
and id = 0
)
Результаты, которые я получаю по этому запросу, - это то, что я хочу:
![Sample Result Wanted](https://image.ibb.co/frd3w7/union.png)
Я использую этот запрос для большого количества данных, поэтому я хочу знать, есть ли способ получить желаемые результаты с помощью более быстрого запроса.