powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ранжирование строк (наверно)
9 сообщений из 9, страница 1 из 1
Ранжирование строк (наверно)
    #39452203
ZakharovPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Давненько не брал я в руки шашки. То ли подзабыл, то ли не знал.

Есть таблица с такими данными:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
WITH t AS (SELECT 'A' AS a, 1 AS b, 2 AS c FROM dual UNION ALL
           SELECT 'B', 1 , 3 FROM dual UNION ALL
           SELECT 'C', 2 , 3 FROM dual UNION ALL
           SELECT 'D', 5 , 6 FROM dual UNION ALL
           SELECT 'E', 6 , 7 FROM dual UNION ALL
           SELECT 'F', 7 , 5 FROM dual UNION ALL
           SELECT 'G', 4 , 2 FROM dual UNION ALL
           SELECT 'H', 4 , 1 FROM dual UNION ALL
           SELECT 'I', 5 , 7 FROM dual)
SELECT * FROM t



Нужно получить такой результат:
rk a b c
1 A 1 2
1 B 1 3
1 C 2 3
1 G 4 2
1 H 4 1
2 D 5 6
2 E 6 7
2 F 7 5
2 I 5 7

Пробовал вот так. Намекните что дальше делать, чтоб получить результат.Спасибо.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH t AS (SELECT 'A' AS a, 1 AS b, 2 AS c FROM dual UNION ALL
           SELECT 'B', 1 , 3 FROM dual UNION ALL
           SELECT 'C', 2 , 3 FROM dual UNION ALL
           SELECT 'D', 5 , 6 FROM dual UNION ALL
           SELECT 'E', 6 , 7 FROM dual UNION ALL
           SELECT 'F', 7 , 5 FROM dual UNION ALL
           SELECT 'G', 4 , 2 FROM dual UNION ALL
           SELECT 'H', 4 , 1 FROM dual UNION ALL
           SELECT 'I', 5 , 7 FROM dual)
SELECT RANK() OVER (PARTITION BY t1.a ORDER BY t1.b,t1.c) rk1,
       t1.a a1, t1.b b1, t1.c c1
  FROM t t1
...
Рейтинг: 0 / 0
Ранжирование строк (наверно)
    #39452204
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZakharovPA,
научиться формализовывать требования к сортировке русским языком. а не вот так.
...
Рейтинг: 0 / 0
Ранжирование строк (наверно)
    #39452209
ZakharovPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть строки, которые объединены идентификаторами - это колонки b и c
Например, строка A имеет идентификатор 1 и 2, строка B имеет идентификатор 1 и 3, значит строки A и B объединены идентификатор 1.
Также в эту группу войдет строка С, которая связана идентификатор 2 со строкой А и идентификатор 3 со строкой В и т.д. G и H.
...
Рейтинг: 0 / 0
Ранжирование строк (наверно)
    #39452213
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZakharovPA,
сказал а говори и б.
как их в рамках группы сортировать и как сортировать пересекающиеся элементы разных групп. за тебя никто формализовывать не будет. и придумывать тоже.
...
Рейтинг: 0 / 0
Ранжирование строк (наверно)
    #39452218
ZakharovPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VintZakharovPA,
сказал а говори и б.
как их в рамках группы сортировать и как сортировать пересекающиеся элементы разных групп. за тебя никто формализовывать не будет. и придумывать тоже.
в рамках группы сортировать - не нужно, в результате должна каждая группа быть пронумерована - 1,2 и т.д.
группы никогда не пересекутся, если группа пересекается, это есть одна и та же группа.
Из примера видно, что строки A,B,C,G,H в одной группе, строка Н имеет конечный идентификатор 4, который больше никогда не повториться.
...
Рейтинг: 0 / 0
Ранжирование строк (наверно)
    #39452221
граф Орфо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ZakharovPAподзабылВместо Ы нужно писать И и местами поменять эти и 3-4 буквы.
...
Рейтинг: 0 / 0
Ранжирование строк (наверно)
    #39452240
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Ранжирование строк (наверно)
    #39452246
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZakharovPA,

монстрик получился
Код: 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.
  1  WITH t AS (SELECT 'A' AS a, 1 AS b, 2 AS c FROM dual UNION ALL
  2             SELECT 'B', 1 , 3 FROM dual UNION ALL
  3             SELECT 'C', 2 , 3 FROM dual UNION ALL
  4             SELECT 'D', 5 , 6 FROM dual UNION ALL
  5             SELECT 'E', 6 , 7 FROM dual UNION ALL
  6             SELECT 'F', 7 , 5 FROM dual UNION ALL
  7             SELECT 'G', 4 , 2 FROM dual UNION ALL
  8             SELECT 'H', 4 , 1 FROM dual UNION ALL
  9             SELECT 'I', 5 , 7 FROM dual)
 10  select t.*,
 11  (select min(a) from t t2
 12  start with t2.a=t.a
 13  connect by NOCYCLE
 14  (t2.b=prior t2.b or t2.c=prior t2.c or t2.b=prior t2.c or t2.c=prior t2.b ) and t2.a <> prior t2.a) o
 15   from t
 16* order by o,a
SQL> /

A          B          C O
- ---------- ---------- -
A          1          2 A
B          1          3 A
C          2          3 A
G          4          2 A
H          4          1 A
D          5          6 D
E          6          7 D
F          7          5 D
I          5          7 D

9 rows selected.



.....
stax
...
Рейтинг: 0 / 0
Ранжирование строк (наверно)
    #39452331
ZakharovPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to env
env что-то в таком духе?
Да это очень похоже на мою тему.
Мой видимо более частный случай.
Зачитался.
Спасибо.

to stax..
То что надо.
Буду проверять. Мой объем данных порядка 1000 строк.Думаю должно быстро работать.
Спасибо.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ранжирование строк (наверно)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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