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

1 |Вася |Толя
2 |Петя |Женя
N |... |...
50 |Коля |Стас
...
Рейтинг: 0 / 0
24.08.2017, 09:23
    #39509699
AnSi_Sr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить результат запроса на два столбца
1. Соединить результаты выборки сами с собой по условию нечетности номера строки первого набора и равенства первый набор.номер строки = второй набор.номер строки + 1;
2. Выбрать только нечетные строки, и с помощью lag прицепить значение из следующей четной строки.
...
Рейтинг: 0 / 0
24.08.2017, 09:48
    #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
24.08.2017, 10:27
    #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
24.08.2017, 10:56
    #39509748
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделить результат запроса на два столбца
AnSi_SrЛогика max(decode(...)) + group by простаНу хоть в чем-то я тебя убедил.
...
Рейтинг: 0 / 0
24.08.2017, 16:17
    #39510022
SY
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разделить результат запроса на два столбца / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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