powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разделить результат запроса на два столбца
6 сообщений из 6, страница 1 из 1
Разделить результат запроса на два столбца
    #39509697
iv_roman_vl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Например, в результирующем запросе я получаю 100 строк(пусть это будет сто имен)
Как мне их вывести в двух столбцах?

1 |Вася |Толя
2 |Петя |Женя
N |... |...
50 |Коля |Стас
...
Рейтинг: 0 / 0
Разделить результат запроса на два столбца
    #39509699
AnSi_Sr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Соединить результаты выборки сами с собой по условию нечетности номера строки первого набора и равенства первый набор.номер строки = второй набор.номер строки + 1;
2. Выбрать только нечетные строки, и с помощью lag прицепить значение из следующей четной строки.
...
Рейтинг: 0 / 0
Разделить результат запроса на два столбца
    #39509704
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnSi_Sr1. Соединить результаты выборки сами с собой по условию нечетности номера строки первого набора и равенства первый набор.номер строки = второй набор.номер строки + 1;
2. Выбрать только нечетные строки, и с помощью lag прицепить значение из следующей четной строки.А проще никак нельзя?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
with s as
(select 'Владимир'   name from dual union all
 select 'Сергей'     name from dual union all
 select 'Игорь'      name from dual union all
 select 'Елена'      name from dual union all
 select 'Евгений'    name from dual union all
 select 'Константин' name from dual union all
 select 'Дмитрий'    name from dual union all
 select 'Максим'     name from dual
)
select trunc((rownum+1)/2) rn,
max(decode(mod(rownum, 2), 1, name)) n1,
max(decode(mod(rownum, 2), 0, name)) n2
from s
group by trunc((rownum+1)/2)
order by rn;

        RN N1         N2
---------- ---------- ----------
         1 Владимир   Сергей
         2 Игорь      Елена
         3 Евгений    Константин
         4 Дмитрий    Максим
...
Рейтинг: 0 / 0
Разделить результат запроса на два столбца
    #39509719
AnSi_Sr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В предыдущем посте: п. 1. или п. 2.

Логика max(decode(...)) + group by проста, но не очевидна.

Код: plsql
1.
2.
3.
4.
with s_names as (..., row_number () over () as nrownumber...)
select s_names.sname as sevenname, lag(s_names.sname) as soddname
from s_names
where mod(s_names.nrownumber, 2) = 1 
...
Рейтинг: 0 / 0
Разделить результат запроса на два столбца
    #39509748
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnSi_SrЛогика max(decode(...)) + group by простаНу хоть в чем-то я тебя убедил.
...
Рейтинг: 0 / 0
Разделить результат запроса на два столбца
    #39510022
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadНу хоть в чем-то я тебя убедил.

ceil(rownum / 2)

меньше операций и буковок.


До кучи 12C:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
with s as
(select 'Vladimir'   name from dual union all
 select 'Sergey'     name from dual union all
 select 'Iror'      name from dual union all
 select 'Elena'      name from dual union all
 select 'Evgenyi'    name from dual union all
 select 'Konstantin' name from dual union all
 select 'Dmitryi'    name from dual union all
 select 'Maksim'     name from dual
)
select  *
  from  s
  match_recognize(
                  measures
                    match_number() as rn,
                    first(name) as n1,
                    case count(*) when 2 then last(name) end as n2
                    pattern(two*)
                    define two as count(*) <= 2
                 )
  order by rn
/

        RN N1         N2
---------- ---------- ----------
         1 Vladimir   Sergey
         2 Iror       Elena
         3 Evgenyi    Konstantin
         4 Dmitryi    Maksim

SQL> 



SY.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разделить результат запроса на два столбца
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]