Oracle присоединиться к двойной дате
Я пытаюсь поместить данные в диапазон дат из двойного запроса. Результат должен выглядеть так:
SINGLEDAY FLAG
01-NOV-2016 1
02-NOV-2016 -
03-NOV-2016 -
04-NOV-2016 1
05-NOV-2016 -
Для списка дней я использую
select (to_date('11.2016','mm.yyyy')+level-1) as SINGLEDAY
from dual
connect by level <= TO_CHAR(LAST_DAY(to_date('11.2016','mm.yyyy')),'DD')
Но как мне объединить содержимое моей таблицы xyz с результатом? Таблица xyz должна быть связана столбцом DATE_OF_SERVICE (дата). Любая помощь будет высоко оценен.
1 ответ
Это в основном left join
по вашему запросу. Предполагая не более одной строки в вашей таблице для каждой даты:
with d as (
select (to_date('09.2016','mm.yyyy')+level-1) as singleday
from dual
connect by level <= TO_CHAR(LAST_DAY(to_date('09.2016', 'mm.yyyy')), 'DD')
)
select t.singleday,
(case when t.date_of_service is not null then 1 end) as flag
from d left join
t
on d.singleday = t.date_of_service
order by d.singleday;
Если есть кратные, то, возможно, вы, что group by
:
with d as (
select (to_date('09.2016','mm.yyyy')+level-1) as singleday
from dual
connect by level <= TO_CHAR(LAST_DAY(to_date('09.2016', 'mm.yyyy')), 'DD')
)
select t.singleday, count(t.date_of_service) as cnt
from d left join
t
on d.singleday = t.date_of_service
group by d.singleday
order by d.singleday;