我想要给定输入的累积行

时间:2019-06-03 15:42:02

标签: sql oracle

我有下面的表格

Months   cnt
Jan        2
Feb        3
Mar        5

我想要下面的输出

Months   cnt
Jan        2
Feb        2
Feb        3
Mar        2
Mar        3
Mar        5

我尝试使用以下查询,但未获得所需的输出

Select distinct months, cnt, level 
from (select months, cnt, rownum row_cnt 
      from tablename) 
connect by level <= row_cnt
Order by months, cnt, level

2 个答案:

答案 0 :(得分:0)

这是将将月份的名称转换为其序号的一种选择(1表示1月,2表示2月,依此类推),然后-使用自连接-返回结果。

SQL> with test (months, cnt) as
  2    (select 'jan', 2 from dual union all
  3     select 'feb', 3 from dual union all
  4     select 'mar', 5 from dual
  5    ),
  6  temp as
  7    (select
  8       months,
  9       to_number(to_char(to_date(months, 'mon', 'nls_date_language=english'), 'mm')) mon,
 10       cnt
 11     from test
 12    )
 13  select a.months, b.cnt
 14  from temp a join temp b on a.mon >= b.mon
 15  order by a.mon, b.cnt;

MON        CNT
--- ----------
jan          2
feb          2
feb          3
mar          2
mar          3
mar          5

6 rows selected.

SQL>

答案 1 :(得分:0)

您需要自我加入:

select t.months, tt.cnt
from tablename t inner join tablename tt
on extract(month from to_date(t.Months,'MON')) >= extract(month from to_date(tt.Months,'MON'))
order by extract(month from to_date(t.Months,'MON')), tt.cnt

请参见demo
结果:

> MONTHS | CNT
> :----- | --:
> Jan    |   2
> Feb    |   2
> Feb    |   3
> Mar    |   2
> Mar    |   3
> Mar    |   5