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

id1 id2
1 1
2 1
3 1
4 7
6 7

нужно сделать запрос таким образом, чтобы в группе записей с одинаковым id2 если id1 = id2 то выводить только совпадающий id1 группы, а если в группе нет id1 <> id2 то выводить все id1 группы. То есть в данном примере должно вывести

1
4
6

Что-то не могу сообразить, мысли крутятся вокруг partition by. Кто-нибудь может подсказать?
...
Рейтинг: 0 / 0
Группировка
    #39635486
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with s (id1, id2) as (
select 1, 1 from dual union all
select 2, 1 from dual union all
select 3, 1 from dual union all
select 4, 7 from dual union all
select 6, 7 from dual)
select *
from
   (select s.*, count(decode(id1, id2, 1)) over (partition by id2) cnt
    from s
   )
where cnt > 0 and id1 = id2 or cnt = 0;

       ID1        ID2        CNT
---------- ---------- ----------
         1          1          1
         4          7          0
         6          7          0
...
Рейтинг: 0 / 0
Группировка
    #39635490
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем OR?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with t(id1, id2) as (select 1, 1
from dual union all select 2, 1
from dual union all select 3, 1
from dual union all select 4, 7
from dual union all select 6, 7
from dual)
select id1#, id2
  from ( select t.*
              , nvl(max(decode(id2,id1,id2)) over(partition by id2), id1) id1#
           from t
) where id1=id1#;

      ID1#        ID2
---------- ----------
         1          1
         4          7
         6          7
...
Рейтинг: 0 / 0
Группировка
    #39635505
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Та том же наборе:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select id1#, id2
from t
match_recognize(
partition by id2
order by id1
measures coalesce(s.id1, m.id1) id1#
one row per match
pattern(m* s m*|m)
define s as id1=id2
     , m as id1<>id2
)
;
      ID1#        ID2
---------- ----------
         1          1
         4          7
         6          7
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Группировка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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