Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Пересечение диапазонов номеров  [new]
ARRay001
Member

Откуда:
Сообщений: 95
Stax,
Да, почти:

1) для каждого select 1 gr, 21 no_beg, 21 no_end from генерить не больше 5-ти элементов (да, но в рамках каждой группы, т.е. собрать все числа из гр.1 (может быть из нескольких строк) и выдать название группы и 5 первых чисел по ней)
2) дистинкт в рамках gr - да (по собранному из разных строк с этой группой)
3) берем <=5 строк в пределах группы (да, см. п1)
4) берём <=5 групп
4) listagg (Группа 1: номера по ней (до 5 номеров)
Группа 2: номера по ней (до 5 номеров)
...
Группа 8: номера по ней (до 5 номеров)
до 5 групп (группа 8 - не по порядку а по названию)
Ещё там во внутреннем запросе считается count без обрезания (для того, чтобы потом добавить обработку исключения и слово ' и другие').
Было бы идеально, если бы count считался при любом из 2-х переполнений (>=5). Либо выводился какой-то признак когда больше 5.
9 июн 21, 18:05    [22333465]     Ответить | Цитировать Сообщить модератору
 Re: Пересечение диапазонов номеров  [new]
ARRay001
Member

Откуда:
Сообщений: 95
В общем, немного упростив (без группировки по группам) сделал так:

with req as (
               select p as pp, gc.name d
                 from tbl_list t,
                       lateral(
                                 select  t.no_beg + level - 1 p
                                 from  dual
                                 where t.no_beg is not null and t.no_end is not null
                                 connect by t.no_beg + level - 1 <= t.no_end
                               ),
                       tbl_group gc       
                where t.group = gc.id and 
                      p between 1 and 100
                order by gc.name, p      
              )   
  select  listagg(case 
                    when ROWNUM = 6 then 'и другие'
                    when ROWNUM > 6 then null  
                  else  
                    req.pp ||'('||req.d||')'
                  end,
                  ', ') within group(order by to_number(req.pp)) 
  from req;  
10 июн 21, 20:59    [22334096]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Oracle Ответить