Я все еще пытаюсь обернуть голову вокруг Pivot и Unpivot и хотел бы получить результат моего желания, но я не могу понять, как получить результат моего желания.Поэтому я надеюсь, что некоторые из вас гуру ORACLE / T-SQL могут помочь мне здесь.
Цель моего запроса:
Преобразование одного столбца в заголовок столбца других столбцов (другие столбцы будутбыть вложенным в несколько столбцов, под которыми находится заголовок столбца)
Здесь я приведу всю информацию о моем вопросе, ожидаемом результате и том, что я пытаюсь
Сценарий таблицы:
CREATE TABLE LC_PERFORMANCE_O
(PERIOD VARCHAR2(100), LC_NUMBER VARCHAR2(20), LC_VALUE NUMBER)
Сценарий вставки:
SET DEFINE OFF;
Insert into LC_PERFORMANCE
(PERIOD, LC_NUMBER, LC_VALUE, PERIOD_NO)
Values
('JANUARY10', 69, 5282964.68, '01');
Insert into LC_PERFORMANCE
(PERIOD, LC_NUMBER, LC_VALUE, PERIOD_NO)
Values
('FEBRUARY10', 57, 4345701.5, '02');
Insert into LC_PERFORMANCE
(PERIOD, LC_NUMBER, LC_VALUE, PERIOD_NO)
Values
('MARCH10', 63, 2570537.13, '03');
Insert into LC_PERFORMANCE
(PERIOD, LC_NUMBER, LC_VALUE, PERIOD_NO)
Values
('APRIL10', 51, 2003928.9, '04');
Insert into LC_PERFORMANCE
(PERIOD, LC_NUMBER, LC_VALUE, PERIOD_NO)
Values
('MAY10', 62, 2729072.07, '05');
Insert into LC_PERFORMANCE
(PERIOD, LC_NUMBER, LC_VALUE, PERIOD_NO)
Values
('JUNE10', 51, 5455665.58, '06');
Insert into LC_PERFORMANCE
(PERIOD, LC_NUMBER, LC_VALUE, PERIOD_NO)
Values
('JULY10', 55, 4499081.21, '07');
Insert into LC_PERFORMANCE
(PERIOD, LC_NUMBER, LC_VALUE, PERIOD_NO)
Values
('AUGUST10', 55, 2493876.83, '08');
Insert into LC_PERFORMANCE
(PERIOD, LC_NUMBER, LC_VALUE, PERIOD_NO)
Values
('SEPTEMBER10', 68, 3203650.57, '09');
Insert into LC_PERFORMANCE
(PERIOD, LC_NUMBER, LC_VALUE, PERIOD_NO)
Values
('OCTOBER10', 107, 7795475.07, '10');
COMMIT;
Ввод: LC_PERFORMANCE Таблица
+-------------+-----------+------------+-----------+
| PERIOD | LC_NUMBER | LC_VALUE | PERIOD_NO |
+-------------+-----------+------------+-----------+
| JANUARY10 | 69 | 5282964.68 | 01 |
+-------------+-----------+------------+-----------+
| FEBRUARY10 | 57 | 4345701.5 | 02 |
+-------------+-----------+------------+-----------+
| MARCH10 | 63 | 2570537.13 | 03 |
+-------------+-----------+------------+-----------+
| APRIL10 | 51 | 2003928.9 | 04 |
+-------------+-----------+------------+-----------+
| MAY10 | 62 | 2729072.07 | 05 |
+-------------+-----------+------------+-----------+
| JUNE10 | 51 | 5455665.58 | 06 |
+-------------+-----------+------------+-----------+
| JULY10 | 55 | 4499081.21 | 07 |
+-------------+-----------+------------+-----------+
| AUGUST10 | 55 | 2493876.83 | 08 |
+-------------+-----------+------------+-----------+
| SEPTEMBER10 | 68 | 3203650.57 | 09 |
+-------------+-----------+------------+-----------+
Ожидаемый вывод: из представления БД
+-----------------+----------------+-----------------+----------------+-----------------+-----------------+-----------------+
| JANUARY10 | FEBRUARY10 | MARCH10 | APRIL10 | MAY10 | JUNE10 | Continuous year |
+-----------------+----------------+-----------------+----------------+-----------------+-----------------+-----------------+
| 69 | 5282964.68 | 57 | 4345701.5 | 63 | 2570537.13 | 51 | 2003928.9 | 62 | 2729072.07 | 51 | 5455665.58 | ... | ... |
+----+------------+----+-----------+----+------------+----+-----------+----+------------+----+------------+--------+--------+
Мой запрос:
CLEAR COLUMNS
COLUMN TEMP_IN_STATEMENT NEW_VALUE STR_IN_STATEMENT;
/
SELECT DISTINCT
LISTAGG ('''' || PERIOD || ''' AS ' || PERIOD, ',')
WITHIN GROUP (ORDER BY PERIOD_NO)
AS TEMP_IN_STATEMENT
FROM (SELECT DISTINCT PERIOD, PERIOD_NO FROM IMPORT_LC_PERFORMANCE);
/
SELECT * FROM
(
SELECT * FROM
(SELECT PERIOD,LC_VALUE FROM IMPORT_LC_PERFORMANCE)
PIVOT (MAX( LC_VALUE ) FOR PERIOD IN (&STR_IN_STATEMENT))
UNION
SELECT * FROM
(SELECT PERIOD,LC_NUMBER FROM IMPORT_LC_PERFORMANCE)
PIVOT (MAX( LC_NUMBER ) FOR PERIOD IN (&STR_IN_STATEMENT))
)T
Результат по моему запросу:
+------------+------------+------------+-----------+------------+------------+------------+------------+-------------+------------+
| JANUARY10 | FEBRUARY10 | MARCH10 | APRIL10 | MAY10 | JUNE10 | JULY10 | AUGUST10 | SEPTEMBER10 | OCTOBER10 |
+------------+------------+------------+-----------+------------+------------+------------+------------+-------------+------------+
| 69 | 57 | 63 | 51 | 62 | 51 | 55 | 55 | 68 | 107 |
+------------+------------+------------+-----------+------------+------------+------------+------------+-------------+------------+
| 5282964.68 | 4345701.5 | 2570537.13 | 2003928.9 | 2729072.07 | 5455665.58 | 4499081.21 | 2493876.83 | 3203650.57 | 7795475.07 |
+------------+------------+------------+-----------+------------+------------+------------+------------+-------------+------------+