Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ранжирование строк (наверно) / 9 сообщений из 9, страница 1 из 1
12.05.2017, 15:50
    #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
12.05.2017, 15:52
    #39452204
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ранжирование строк (наверно)
ZakharovPA,
научиться формализовывать требования к сортировке русским языком. а не вот так.
...
Рейтинг: 0 / 0
12.05.2017, 15:54
    #39452209
ZakharovPA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ранжирование строк (наверно)
Есть строки, которые объединены идентификаторами - это колонки b и c
Например, строка A имеет идентификатор 1 и 2, строка B имеет идентификатор 1 и 3, значит строки A и B объединены идентификатор 1.
Также в эту группу войдет строка С, которая связана идентификатор 2 со строкой А и идентификатор 3 со строкой В и т.д. G и H.
...
Рейтинг: 0 / 0
12.05.2017, 16:01
    #39452213
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ранжирование строк (наверно)
ZakharovPA,
сказал а говори и б.
как их в рамках группы сортировать и как сортировать пересекающиеся элементы разных групп. за тебя никто формализовывать не будет. и придумывать тоже.
...
Рейтинг: 0 / 0
12.05.2017, 16:09
    #39452218
ZakharovPA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ранжирование строк (наверно)
VintZakharovPA,
сказал а говори и б.
как их в рамках группы сортировать и как сортировать пересекающиеся элементы разных групп. за тебя никто формализовывать не будет. и придумывать тоже.
в рамках группы сортировать - не нужно, в результате должна каждая группа быть пронумерована - 1,2 и т.д.
группы никогда не пересекутся, если группа пересекается, это есть одна и та же группа.
Из примера видно, что строки A,B,C,G,H в одной группе, строка Н имеет конечный идентификатор 4, который больше никогда не повториться.
...
Рейтинг: 0 / 0
12.05.2017, 16:16
    #39452221
граф Орфо
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ранжирование строк (наверно)
ZakharovPAподзабылВместо Ы нужно писать И и местами поменять эти и 3-4 буквы.
...
Рейтинг: 0 / 0
12.05.2017, 16:54
    #39452240
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ранжирование строк (наверно)
...
Рейтинг: 0 / 0
12.05.2017, 17:03
    #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
12.05.2017, 19:13
    #39452331
ZakharovPA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ранжирование строк (наверно)
to env
env что-то в таком духе?
Да это очень похоже на мою тему.
Мой видимо более частный случай.
Зачитался.
Спасибо.

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


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