Использование Oracle 12c. У меня есть запрос, который возвращает все данные, которые мне нужны, однако он разбит на несколько строк. Я пытаюсь использовать сводную таблицу для консолидации данных из n строк в 1 строку, транспонируя n уникальных наборов значений из 2 столбцов в n столбцов, условно выбирая, какой столбец из набора столбцов использовать значение для каждого из n транспонированныхколонны. Я изо всех сил пытаюсь выяснить, возможно ли это или не может быть сделано.
Ниже приведен упрощенный пример того, что возвращает запрос:
| ID | Inst_Created | Inst_Modified | Inst_Group | Inst_Prop | VAL_INT | VAL_REAL | VAL_STR |
+----+--------------+---------------+------------+-----------+---------+----------+---------+
| 01 | 1571954537 | 1571954537 | GenGroup1 | IntProp1 | 0 | (null) | (null) |
| 01 | 1571954537 | 1571954537 | GenGroup1 | RealProp2 | (null) | 12.34567 | (null) |
| 01 | 1571954537 | 1571954537 | GenGroup1 | RealProp3 | (null) | 123.4567 | (null) |
| 01 | 1571954537 | 1571954537 | GenGroup1 | StrProp4 | (null) | (null) | dirpath |
| 01 | 1571954537 | 1577754537 | GenGroup2 | IntProp5 | 1337 | (null) | (null) |
| 01 | 1571954537 | 1577754537 | GenGroup2 | RealProp6 | (null) | 13.37 | (null) |
| 01 | 1570054537 | 1570854537 | GenGroup3 | StrProp7 | (null) | (null) | testing |
| 01 | 1570054537 | 1570854537 | GenGroup3 | StrProp8 | (null) | (null) | valid |
| 02 | 1571954540 | 1571954540 | GenGroup1 | IntProp1 | 1 | (null) | (null) |
| 02 | 1571954540 | 1571954540 | GenGroup1 | RealProp2 | (null) | 12.34568 | (null) |
| 02 | 1571954540 | 1571954540 | GenGroup1 | RealProp3 | (null) | 123.4568 | (null) |
| 02 | 1571954540 | 1571954540 | GenGroup1 | StrProp4 | (null) | (null) | dirpat2 |
| 02 | 1571954540 | 1577754540 | GenGroup2 | IntProp5 | 1338 | (null) | (null) |
| 02 | 1571954540 | 1577754540 | GenGroup2 | RealProp6 | (null) | 13.38 | (null) |
| 02 | 1570054540 | 1570854540 | GenGroup3 | StrProp7 | (null) | (null) | testin2 |
| 02 | 1570054540 | 1570854540 | GenGroup3 | StrProp8 | (null) | (null) | valid2 |
+----+--------------+---------------+------------+-----------+---------+----------+---------+
Столбцы Inst_Created и Inst_Modified являются временными метками эпохи моделирования. Столбцы VAL_INT, VAL_REAL и VAL_STR имеют типы данных NUMBER (38,0), FLOAT и VARCHAR2 (1024) соответственно. Только один из трех столбцов VAL_ * будет ненулевым для любой данной строки;Вы можете узнать, какой из трех будет столбцами Inst_Group, Inst_Prop.
Ниже приведен упрощенный пример того, что я пытаюсь получить с помощью сводной таблицы:
| ID | Earliest_Created | Latest_Modified | G1P1_Int | G1P2_Real | G1P3_Real | G1P4_Str | G2P5_Int | G2P6_Real | G3P7_Str | G3P8_Str |
+----+------------------+-----------------+----------+-----------+-----------+----------+----------+-----------+----------+----------+
| 01 | 1570054537 | 1577754537 | 0 | 12.34567 | 123.4567 | dirpath | 1337 | 13.37 | testing | valid |
| 02 | 1570054540 | 1579954540 | 1 | 12.34568 | 123.4568 | dirpat2 | 1338 | 13.38 | testin2 | valid2 |
+----+------------------+-----------------+----------+-----------+-----------+----------+----------+-----------+----------+----------+
Я выяснил, как использовать предложения pivot_for_clause и pivot_in_clause для преобразования значений (Inst_Group, Inst_Prop) в столбцы при переименовании столбца. Я пытаюсь выяснить, как получить значения в транспонированных столбцах, с правильным типом данных.
Ранее я пытался использовать функцию LISTAGG в запросе, приводя все VAL_. * значения для varchar2, так что для значений VAL был только один столбец. Я отказался от этого метода из-за проблем, связанных с попыткой сделать каждый транспонированный столбец правильным исходным типом данных, и из-за снижения производительности все это, казалось, вызывало.