powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интересный запрос
9 сообщений из 9, страница 1 из 1
Интересный запрос
    #39689377
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, всех с пятнице!

Друзья, как бы вы переписали следующий запрос:

Код: 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.
32.
33.
34.
with t1 as (select 1 id,10 group_id,11 val from dual
             union all
             select 2 id,10 group_id,12 val from dual
             union all
             select 3 id,10 group_id,13 val from dual
             union all
             select 1 id,11 group_id,111 val from dual
             union all
             select 2 id,11 group_id,222 val from dual
             union all
             select 3 id,11 group_id,333 val from dual
             union all
             select 4 id,11 group_id,444 val from dual
             union all
             select 1 id,12 group_id,555 val from dual
             union all
             select 2 id,12 group_id,666 val from dual
             union all
             select 3 id,12 group_id,777 val from dual
             union all
             select 4 id,12 group_id,888 val from dual
             union all
             select 1 id,13 group_id,481 val from dual
             union all
             select 2 id,13 group_id,482 val from dual
             union all
             select 3 id,13 group_id,483 val from dual
             union all
             select 4 id,13 group_id,484 val from dual)
select  t1.val
        ,(select val from t1 t where t.group_id = t1.group_id + 1 and t.id = t1.id)
        ,(select val from t1 t where t.group_id = t1.group_id + 2 and t.id = t1.id)
  from  t1
where  t1.group_id = 10 + 1  



Навскидку вижу только вариант:

Код: 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.
32.
33.
34.
35.
36.
37.
with t1 as (select 1 id,10 group_id,11 val from dual
             union all
             select 2 id,10 group_id,12 val from dual
             union all
             select 3 id,10 group_id,13 val from dual
             union all
             select 1 id,11 group_id,111 val from dual
             union all
             select 2 id,11 group_id,222 val from dual
             union all
             select 3 id,11 group_id,333 val from dual
             union all
             select 4 id,11 group_id,444 val from dual
             union all
             select 1 id,12 group_id,555 val from dual
             union all
             select 2 id,12 group_id,666 val from dual
             union all
             select 3 id,12 group_id,777 val from dual
             union all
             select 4 id,12 group_id,888 val from dual
             union all
             select 1 id,13 group_id,481 val from dual
             union all
             select 2 id,13 group_id,482 val from dual
             union all
             select 3 id,13 group_id,483 val from dual
             union all
             select 4 id,13 group_id,484 val from dual)
select  max(case when t.group_id = 11 then t.val else null end)
        ,max(case when t.group_id = 12 then t.val else null end)
        ,max(case when t.group_id = 13 then t.val else null end)
  from  t1
        ,t1 t
where  t.group_id = t1.val
group
    by  t.id



Может будут еще у кого нить интересные варианты?
...
Рейтинг: 0 / 0
Интересный запрос
    #39689409
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Интересный запрос
    #39689459
MazoHist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно магия данных, но group_id + 1 позволяет предположить:
Код: 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.
32.
33.
34.
35.
36.
37.
38.
with t1 as (select 1 id,10 group_id,11 val from dual
             union all
             select 2 id,10 group_id,12 val from dual
             union all
             select 3 id,10 group_id,13 val from dual
             union all
             select 1 id,11 group_id,111 val from dual
             union all
             select 2 id,11 group_id,222 val from dual
             union all
             select 3 id,11 group_id,333 val from dual
             union all
             select 4 id,11 group_id,444 val from dual
             union all
             select 1 id,12 group_id,555 val from dual
             union all
             select 2 id,12 group_id,666 val from dual
             union all
             select 3 id,12 group_id,777 val from dual
             union all
             select 4 id,12 group_id,888 val from dual
             union all
             select 1 id,13 group_id,481 val from dual
             union all
             select 2 id,13 group_id,482 val from dual
             union all
             select 3 id,13 group_id,483 val from dual
             union all
             select 4 id,13 group_id,484 val from dual)
select * from (
select group_id
     , t1.val
     , last_value(val) over (partition by t1.id order by group_id range between current row and 1 following ) nextval1
     , last_value(val) over (partition by t1.id order by group_id range between current row and 2 following ) nextval2
from t1
where  t1.group_id in (10+1,10+2,10+3)
)
where group_id = 10+1
...
Рейтинг: 0 / 0
Интересный запрос
    #39689504
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frog

Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
  1  with t1 as (select 1 id,10 group_id,11 val from dual
  2               union all
  3               select 2 id,10 group_id,12 val from dual
  4               union all
  5               select 3 id,10 group_id,13 val from dual
  6               union all
  7               select 1 id,11 group_id,111 val from dual
  8               union all
  9               select 2 id,11 group_id,222 val from dual
 10               union all
 11               select 3 id,11 group_id,333 val from dual
 12               union all
 13               select 4 id,11 group_id,444 val from dual
 14               union all
 15               select 1 id,12 group_id,555 val from dual
 16               union all
 17               select 2 id,12 group_id,666 val from dual
 18               union all
 19               select 3 id,12 group_id,777 val from dual
 20               union all
 21               select 4 id,12 group_id,888 val from dual
 22               union all
 23               select 1 id,13 group_id,481 val from dual
 24               union all
 25               select 2 id,13 group_id,482 val from dual
 26               union all
 27               select 3 id,13 group_id,483 val from dual
 28               union all
 29               select 4 id,13 group_id,484 val from dual
 30               union all
 31               select 45id,13 group_id,485 val from dual)
 32  select
 33     max(decode(group_id,11,val)) v11
 34    ,max(decode(group_id,12,val)) v12
 35    ,max(decode(group_id,13,val)) v13
 36  from  t1
 37  where  t1.group_id  in (11,12,13)
 38  group by id
 39* having max(decode(group_id,11,val)) is not null
SQL> /

       V11        V12        V13
---------- ---------- ----------
       111        555        481
       222        666        482
       444        888        484
       333        777        483



.....
stax
...
Рейтинг: 0 / 0
Интересный запрос
    #39689527
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример подходит под Pivoting Operations
...
Рейтинг: 0 / 0
Интересный запрос
    #39689535
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123йй,

pivot
1)переменную <i>+1 не прикрутить
2) придется оборачивать в подзапрос

.....
stax
...
Рейтинг: 0 / 0
Интересный запрос
    #39689537
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxпеременную <i>+1 не прикрутить
я смотрю ты тоже не прикручивал
Код: plsql
1.
where  t1.group_id  in (11,12,13)


да ТС не озвучивал, что <i> у него меняется, а не равно 10
...
Рейтинг: 0 / 0
Интересный запрос
    #39689540
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123ййStaxпеременную <i>+1 не прикрутить
я смотрю ты тоже не прикручивал
Код: plsql
1.
where  t1.group_id  in (11,12,13)



звеняюсь, мое лентяйство проявилось

зы
Запрос
......
stax
...
Рейтинг: 0 / 0
Интересный запрос
    #39689611
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

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


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