我的生产代码基于当地大师的建议和@Ben 技术:
-- 生成序列 1..N:
SELECT level FROM dual CONNECT BY level <= 4;
-- 生成天数:
选择 to_date('01-01-2012','DD-MM-YYYY') + 级别 - 1
从双
按级别连接 <= to_date('31-12-2012','DD-MM-YYYY') - to_date('01-01-2012','DD-MM-YYYY') + 1;
日期为 (
选择 (to_date('01-01-2012','DD-MM-YYYY') + level - 1) 作为日期范围
从双
按级别连接 <= to_date('31-12-2012','DD-MM-YYYY') - to_date('01-01-2012','DD-MM-YYYY') + 1
) 选择 sum(tbl.cnt) 作为 summ, trunc(dates.daterange, 'DDD')
从日期
左外连接 DATA_TBL tbl
在 trunc(tbl.inc_date, 'DDD') = trunc(dates.daterange, 'DDD')
按 trunc(dates.daterange, 'DDD') 分组
按 trunc(dates.daterange, 'DDD') 排序;
-- 生成月份:
选择 ADD_MONTHS(to_date('01-01-2012','DD-MM-YYYY'), 级别 - 1)
从双
按级别连接 <=months_between(to_date('31-12-2012','DD-MM-YYYY'), to_date('01-01-2012','DD-MM-YYYY')) + 1;
日期为 (
选择 add_months(to_date('01-01-2012','DD-MM-YYYY'), level-1) 作为日期范围
从双
按级别连接 <= months_between(to_date('31-12-2012','DD-MM-YYYY'), to_date('01-01-2012','DD-MM-YYYY')) + 1
) 选择 sum(tbl.cnt) 作为 summ, trunc(dates.daterange, 'MM')
从日期
左外连接 DATA_TBL tbl
在 trunc(tbl.inc_date, 'MM') = trunc(dates.daterange, 'MM')
按 trunc(dates.daterange, 'MM') 分组
按 trunc(dates.daterange, 'MM') 排序;
-- 生成宿舍:
选择 ADD_MONTHS(to_date('01-01-2012','DD-MM-YYYY'), (level-1)*3)
从双
按级别连接 <= months_between(to_date('31-12-2012','DD-MM-YYYY'), to_date('01-01-2012','DD-MM-YYYY'))/3 + 1;
日期为 (
选择 add_months(to_date('01-01-2012','DD-MM-YYYY'), (level-1)*3) 作为日期范围
从双
按级别连接 <= months_between(to_date('31-12-2012','DD-MM-YYYY'), to_date('01-01-2012','DD-MM-YYYY'))/3 + 1
) 选择 sum(tbl.cnt) 作为 summ, trunc(dates.daterange, 'Q')
从日期
左外连接 DATA_TBL tbl
在 trunc(tbl.inc_date, 'Q') = trunc(dates.daterange, 'Q')
按 trunc(dates.daterange, 'Q') 分组
按 trunc(dates.daterange, 'Q') 排序;
-- 生成年份:
选择 add_months(to_date('01-01-2007','DD-MM-YYYY'), (level-1)*12)
从双
按级别连接 <=months_between(to_date('31-01-2012','DD-MM-YYYY'), to_date('01-01-2007','DD-MM-YYYY'))/12 + 1;
日期为 (
选择 add_months(to_date('01-01-2007','DD-MM-YYYY'), (level-1)*12) 作为日期范围
从双
按级别连接 <= months_between(to_date('31-01-2012','DD-MM-YYYY'), to_date('01-01-2007','DD-MM-YYYY'))/12 + 1
) 选择 sum(tbl.cnt) 作为 summ, trunc(dates.daterange, 'YYYY')
从日期
左外连接 DATA_TBL tbl
在 trunc(tbl.inc_date, 'YYYY') = trunc(dates.daterange, 'YYYY')
按 trunc(dates.daterange, 'YYYY') 分组
按 trunc(dates.daterange, 'YYYY') 排序;
但是按级别连接是 hack 根据: