2016-11-01 117 views
0

我試圖將數據放入雙重查詢的日期範圍。結果應該是這樣的:甲骨文加入雙日期範圍

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(日期)列連接。任何幫助將不勝感激。

+0

你怎麼從那裏你選擇TO_DATE查詢01-NOV (09.2016)?在你的語言環境中,第九個月是11月?更有可能你錯誤​​地陳述事實。不爽! – mathguy

+0

對不起,mathguy,你是對的09.2016。我將它改爲11.2016。無論如何。根據01-NOV:日期是從我的oracle實例默認給出的。無論我使用哪種格式,連接似乎都是這樣處理的。 – fscherbaum

回答

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;