2016-11-01 6 views
0

デュアルクエリーからデータを日付範囲に配置しようとしています。私はOracle join dual daterange

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の内容に参加しない日の一覧については

SINGLEDAY  FLAG 
01-NOV-2016  1 
02-NOV-2016  - 
03-NOV-2016  - 
04-NOV-2016  1 
05-NOV-2016  - 

:結果は次のようになりますか?テーブルxyzは、DATE_OF_SERVICE(日付)列で接続する必要があります。どんな助けも高く評価されます。

+0

(09.2016)?あなたのロケールで9番目の月は11月ですか?あなたが事実を誤解している可能性が高いクールではありません! – mathguy

+0

申し訳ありませんmathguy、あなたは09.2016で正しいです。私はそれを11.2016に変更しました。とにかく。 01-NOVによると、日付は私のoracleインスタンスからデフォルトで与えられます。どの形式でレンダリングしても問題ありません。接続はこのように扱われているようです。 – fscherbaum

答えて

1

これは基本的にクエリのleft joinです。日付ごとあなたのテーブルに最大1つの行と仮定すると:

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

あなたはTO_DATEを選択クエリから01 - 11月を取得するにはどうすればよい
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; 
関連する問題