Я хочу кумулятивный ряд для данного ввода - PullRequest
0 голосов
/ 03 июня 2019

У меня есть таблица как ниже

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 голосов
/ 03 июня 2019

Вам нужно самостоятельно присоединиться:

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

См. Демоверсию .
Результаты:

> MONTHS | CNT
> :----- | --:
> Jan    |   2
> Feb    |   2
> Feb    |   3
> Mar    |   2
> Mar    |   3
> Mar    |   5
0 голосов
/ 03 июня 2019

Вот одна опция, которая преобразует названия месяцев в их порядковый номер (1 для января, 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...