powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите с pivot запросом
6 сообщений из 6, страница 1 из 1
помогите с pivot запросом
    #39372912
abort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть таблица 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
помогите с pivot запросом
    #39373066
Glays
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
помогите с pivot запросом
    #39373526
abort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все здорово, но... количество цифр заранее неизвестно. динамический sql?
...
Рейтинг: 0 / 0
помогите с pivot запросом
    #39373663
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abortнеизвестноте, кто умеет изведывать неизвестное, должны уметь сами делать пивот.
...
Рейтинг: 0 / 0
помогите с pivot запросом
    #39373689
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
abortвсе здорово, но...
не строй из себя жертву, ты в любом случае ограничен 1000-ю столбцов

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

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


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