powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sql задачка
11 сообщений из 11, страница 1 из 1
sql задачка
    #39941092
Алекссс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть набор
1 - 11
2 - 21
2 - 22
3 - 31
3 - 32
надо получить без model:
11-21-31
11-22-31
11-21-32
11-22-32

спасибо
...
Рейтинг: 0 / 0
sql задачка
    #39941100
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
with t as (
           select 1 id,11 val from dual union all
           select 2,21 from dual union all
           select 2,22 from dual union all
           select 3,31 from dual union all
           select 3,32 from dual
          ),
     x as (
           select  t.*,
                   row_number() over(partition by id order by val) rn
             from  t
          )
select  last_value(val1 ignore nulls) over(order by rn) val1,
        last_value(val2 ignore nulls) over(order by rn) val2,
        last_value(val3 ignore nulls) over(order by rn) val3
  from  x
  pivot(
        max(val)
        for id in (1 val1,2 val2,3 val3)
       )
/

      VAL1       VAL2       VAL3
---------- ---------- ----------
        11         21         31
        11         22         32

SQL>



SY.
...
Рейтинг: 0 / 0
sql задачка
    #39941102
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор же вроде хочет обычное декартово произведение. В чем проблема - мне не понятно

Возможно туплю и не понял автора.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t as (
           select 1 id,11 val from dual union all
           select 2,21 from dual union all
           select 2,22 from dual union all
           select 3,31 from dual union all
           select 3,32 from dual
          )
select a.val, b.val, c.val from (select val from t where id=1) a,
(select val from t where id=2) b,
(select val from t where id=3) c
...
Рейтинг: 0 / 0
sql задачка
    #39941110
Алекссс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо за подсказки
Leonid Kudryavtsev, да, декартово, только мы заранее не знаем сколько будет строк в группах и сколько самих групп, думал может возможно сделать статическим sql
...
Рейтинг: 0 / 0
sql задачка
    #39941111
Алекссс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY, не хватает еще 2-х строк)
...
Рейтинг: 0 / 0
sql задачка
    #39941115
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Алекссс,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with t as (
           select 1 id,11 val from dual union all
           select 2,21 from dual union all
           select 2,22 from dual union all
           select 3,31 from dual union all
           select 3,32 from dual
          )
select
 sys_connect_by_path(val,'-') x
from t
start with id=1
connect by id = prior id +1
order by level desc
fetch first 1 rows with ties
...
Рейтинг: 0 / 0
sql задачка
    #39941117
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Код: 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.
SQL> ;
  1  with t as (
  2             select 1 id,11 val from dual union all
  3             select 2,21 from dual union all
  4             select 2,22 from dual union all
  5             select 3,31 from dual union all
  6             select 3,32 from dual
  7            )
  8  select
  9   ltrim(sys_connect_by_path(val,'-'),'-') x
 10  from t
 11  start with id=1
 12  connect by id = prior id +1
 13  order by level desc
 14  fetch first 1 rows with ties
 15*
SQL> /

X
--------------------------------------------------------------------------------
11-21-31
11-21-32
11-22-31
11-22-32
...
Рейтинг: 0 / 0
sql задачка
    #39941122
Алекссс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtender, круть!
а в SQL:2008 могешь?)
...
Рейтинг: 0 / 0
sql задачка
    #39941198
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алекссс
xtender, круть!
а в SQL:2008 могешь?)
на скорую руку за 5 минут
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
;
 with t as (
            select 1 id,11 val union all
            select 2,21 union all
            select 2,22 union all
            select 3,31 union all
            select 3,32 
           ),
tt as(
select id,
       cast(val as varchar(8000)) val
  from t where id=1
union all
select t.id,
       tt.val + ' - ' + cast(t.val as varchar(8000))
  from t join tt
   on t.id = tt.id+1
)
select * from tt
 where not exists(select * from tt tt1 where tt1.val like tt.val + '%' and tt1.val > tt.val)

...
Рейтинг: 0 / 0
sql задачка
    #39941200
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только есть ли там рекурсия?
...
Рейтинг: 0 / 0
sql задачка
    #39941545
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
только есть ли там рекурсия?
Recursive CTE доступно в MS SQL Server, начиная с версии 2005.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sql задачка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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