дам вам метод:
- Разделив значения столбца дадут количество строк вам нужно разбить.
- Затем дальнейшее разделение на этот счет разделило бы его на равное количество ведер. А затем остальное ROW GENERATOR способ.
Тестовый пример:
SQL> CREATE TABLE t(
2 topcode VARCHAR2(10),
3 totalpeep NUMBER);
Table created.
SQL>
SQL> INSERT INTO t VALUES('A', 100);
1 row created.
SQL> INSERT INTO t VALUES('B', 45);
1 row created.
SQL>
SQL> SELECT * FROM t;
TOPCODE TOTALPEEP
---------- ----------
A 100
B 45
SQL>
Таким образом, SQL, чтобы создать равное количество ковшей на основе подсчета:
SQL> WITH DATA AS
2 (SELECT t.*, t.totalpeep/20 wt_bucket FROM t)
3 SELECT topcode, topcode||level
4 FROM DATA
5 CONNECT BY LEVEL <= wt_bucket
6 AND PRIOR topcode = topcode
7 AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
8/
TOPCODE TOPCODE||LEVEL
---------- --------------------------------------------
A A1
A A2
A A3
A A4
A A5
B B1
B B2
7 rows selected.
SQL>
даже если Totalpeep меньше 20 то это должно быть одна группа
В этом случае оставшееся ведро, которое не используется, следует также учитывать:
SQL> WITH DATA AS
2 (SELECT t.*, t.totalpeep/20 wt_bucket FROM t)
3 SELECT topcode, topcode||level
4 FROM DATA
5 CONNECT BY LEVEL <= ceil(wt_bucket)
6 AND PRIOR topcode = topcode
7 AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
8/
TOPCODE TOPCODE||LEVEL
---------- --------------------------------------------
A A1
A A2
A A3
A A4
A A5
B B1
B B2
B B3
8 rows selected.
SQL>
Таким образом, для группы со значениями не как целое число после деления, вы могли бы рассмотреть их.
Существует сочетание генерации иерархии и строк здесь. См. Мой ответ. –