Строки в значения, разделенные запятыми, в зависимости от количества значений

Поскольку существует ограничение на длину значений списка

Мне нужно преобразовать строки в список значений максимум 2400 строк и оставшиеся в следующем списке значений

Возможно ли это в SQL?

Приведенный ниже запрос преобразует все строки в один список. API не принимает, если длина списка значений превышает 2400 значений.

       select listagg(id, ',')  as id_list from table;

Пример

Если в таблице 30 строк, то первые 10 должны войти в один список значений, вторые 10 строк должны войти во второй список значений, а оставшиеся значения - в последний список значений.


person Kar    schedule 16.04.2020    source источник
comment
Итак, вы спрашиваете, есть ли ограничение или как разделить на списки с максимальным количеством N строк на раздел?   -  person Simeon Pilgrim    schedule 17.04.2020


Ответы (1)


with data as (
    select row_number()over(order by seq8()) as rn
    from table(generator(rowcount=>10000))
)
select listagg(rn, ',') as list
from data;

показать нет предела .. но это не так полезно.

так что делать то, что вы хотите

with data as (
    select row_number()over(order by seq8()) as rn
    from table(generator(rowcount=>10000))
)
select listagg(rn, ',') within group (order by rn) as list
from data
group by floor(rn/2400)
order by 1;

дает вам пять строк (усечение, сделанное мной, просто чтобы показать, как данные разделены, как вы просили)

LIST
1,2,3,4,5,6,7,8,9,10,11,12,13,...
2400,2401,2402,2403,2404,2405,...
4800,4801,4802,4803,4804,4805,...
7200,7201,7202,7203,7204,7205,...
9600,9601,9602,9603,9604,9605,...
person Simeon Pilgrim    schedule 16.04.2020
comment
Большое спасибо .. мне это нравится - person Kar; 17.04.2020