Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите с pivot запросом / 6 сообщений из 6, страница 1 из 1
22.12.2016, 13:48
    #39372912
abort
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с pivot запросом
есть таблица table1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
WITH T AS
(
     SELECT 6 AS NUM1, 3 AS NUM2 FROM DUAL UNION ALL
     SELECT 6 AS NUM1, 3 AS NUM2 FROM DUAL UNION ALL
     SELECT 1 AS NUM1, 6 AS NUM2 FROM DUAL UNION ALL
     SELECT 3 AS NUM1, 6 AS NUM2 FROM DUAL UNION ALL
     SELECT 3 AS NUM1, 6 AS NUM2 FROM DUAL UNION ALL
     SELECT 6 AS NUM1, 3 AS NUM2 FROM DUAL
)

SELECT * FROM T

NUM1	NUM2
6	        3
6	        3
1	        6
3	        6
3	        6
6	        3



нужно получить такие данные:
Код: plsql
1.
2.
3.
4.
       3      6       1
6    3;2    0;0     0;1
1    0;0    1;0     0;0
3    0;0    2;3     0;0


на пересечении цифр - указать число встречающихся цифр из num1 в num2, а через запятую число цифр из num 2 в num1.
Например: на пересечении 6 и 3 стоят 3 и 2. 3- это сколько раз встретились пары 6-3, а 2 означает сколько встретились пары 3-6
...
Рейтинг: 0 / 0
22.12.2016, 15:43
    #39373066
Glays
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с pivot запросом
abort, не знаю зачем это но вот.

Код: 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.
WITH T
     AS (SELECT 6 AS NUM1, 3 AS NUM2 FROM DUAL
         UNION ALL
         SELECT 6 AS NUM1, 3 AS NUM2 FROM DUAL
         UNION ALL
         SELECT 1 AS NUM1, 6 AS NUM2 FROM DUAL
         UNION ALL
         SELECT 3 AS NUM1, 6 AS NUM2 FROM DUAL
         UNION ALL
         SELECT 3 AS NUM1, 6 AS NUM2 FROM DUAL
         UNION ALL
         SELECT 6 AS NUM1, 3 AS NUM2 FROM DUAL),
     cnt_t
     AS (  SELECT T1.NUM1, T1.NUM2, COUNT (*) AS cnt
             FROM T T1
         GROUP BY T1.NUM1, T1.NUM2),
     piv_t2
     AS (  SELECT *
             FROM cnt_t PIVOT (SUM (cnt) FOR NUM1 IN (1, 3, 6))
         ORDER BY NUM2),
     piv_t1
     AS (  SELECT *
             FROM cnt_t PIVOT (SUM (cnt) FOR NUM2 IN (1, 3, 6))
         ORDER BY NUM1)
SELECT NUM1,
       NVL (piv_t1."3", 0) || ';' || NVL (piv_t2."3", 0) AS "3",
       NVL (piv_t1."6", 0) || ';' || NVL (piv_t2."6", 0) AS "6",
       NVL (piv_t1."1", 0) || ';' || NVL (piv_t2."1", 0) AS "1"
  FROM piv_t1 FULL OUTER JOIN piv_t2 ON NUM1 = NUM2
...
Рейтинг: 0 / 0
23.12.2016, 10:30
    #39373526
abort
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с pivot запросом
все здорово, но... количество цифр заранее неизвестно. динамический sql?
...
Рейтинг: 0 / 0
23.12.2016, 12:20
    #39373663
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с pivot запросом
abortнеизвестноте, кто умеет изведывать неизвестное, должны уметь сами делать пивот.
...
Рейтинг: 0 / 0
23.12.2016, 12:54
    #39373689
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с pivot запросом
abortвсе здорово, но...
не строй из себя жертву, ты в любом случае ограничен 1000-ю столбцов

А если ни количество, ни значения заранее неизвестны, то коллекции и слово из трёх букв на "X" тебе в помощь.
...
Рейтинг: 0 / 0
26.12.2016, 12:07
    #39375160
rotation_table
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с pivot запросом
env ты в любом случае ограничен 1000-ю столбцов

Pivot, да, ограничен, а вот c decode у меня легко за 2 тыс перевалило. Вот тут мне помогли решить подобную задачу. Запрос, естественно, пишется динамически.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите с pivot запросом / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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