Oracle генерирует несколько записей - PullRequest
0 голосов
/ 10 октября 2019

На основе значения столбца NUMBER необходимо сгенерировать несколько записей, разделив его на постоянное значение 25. Если частное равно 1, сгенерировать одну запись, если 2 сгенерировать две записи и т. Д.

Пример данных:

ID,DATE,NUMBER

A1,20160415,25

A2,20170510,50

A3,20180715,100

Вывод:

ID,DATE,NUMBER

A1.1,2016415,25

A2.1,20170510,50

A2.2,20170510,50

A3.1,20180715,100

A3.2,20180715,100

A3.3,20180715,100

A3.4,20180715,100

Я пытался с предложением CONNECT BY, но не получил желаемого результата.

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

В качестве альтернативы:

SQL> with your_table (id, cdate, cnumber) as
  2    (select 'a1', 20160415,  25 from dual union all
  3     select 'a2', 20170510,  50 from dual union all
  4     select 'a3', 20180715, 100 from dual
  5    )
  6  select id, cdate, cnumber
  7  from your_table cross join table(cast(multiset(select level from dual
  8                                                 connect by level <= cnumber / 25
  9                                                ) as sys.odcinumberlist))
 10  order by id;

ID      CDATE    CNUMBER
-- ---------- ----------
a1   20160415         25
a2   20170510         50
a2   20170510         50
a3   20180715        100
a3   20180715        100
a3   20180715        100
a3   20180715        100

7 rows selected.

SQL>
0 голосов
/ 10 октября 2019

Вы можете использовать connect by следующим образом:

Select t.id || '.' || nums.lvl as id,
T.date,
T.number 
From your_table t
Join (Select level as lvl from
(Select max(number)/25 as num from your_table)
Connect by level <= num) nums -- generating rows with value 1,2,3... till max value for the number/25. In our case 4 values
On (t.number/25 >= lvl) -- joining based on number of rows to be created for each row

Я надеюсь, что в числовом столбце нет значений, не кратных 25.

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...