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 (日付) 列で接続する必要があります。どんな助けでも大歓迎です。

4

1 に答える 1

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

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;
于 2016-11-01T11:35:34.347 に答える