Можем ли мы создать таблицу, используя выходные данные СВОДНОГО оператора в Oracle?

#oracle #pivot

Вопрос:

У меня есть таблица, и использование оператора PIVOT над ней возвращает результат, который я искал, теперь мне нужно сохранить его в таблице для дальнейших вычислений.

Когда я делаю что-то подобное:

     create table new_table as 
(
select * from mytable
unpivot(period for months in 
(
"October 2019",
"November 2019",
"December 2019",
"January 2020",
"February 2020",
"March 2020" ))
pivot(
avg(period) 
for PROD_SKU in ('ABC123','DEF456')
)
order by 1);
 

он выдает ошибку «ORA-00907: отсутствует правая скобка».

Однако мой сводный запрос работает нормально!

Комментарии:

1. пожалуйста, отредактируйте вопрос и покажите полное заявление о создании

Ответ №1:

Да, вам не нужны скобки после AS и до ; .

Если у вас есть образцы данных:

 CREATE TABLE mytable (
  PROD_SKU,
  "October 2019",
  "November 2019",
  "December 2019",
  "January 2020",
  "February 2020",
  "March 2020"
) AS
SELECT 'ABC123', 10, 11, 12, 13, 14, 15 FROM DUAL UNION ALL
SELECT 'DEF456', 20, 21, 22, 23, 24, 25 FROM DUAL;
 

Затем:

 create table new_table as 
select *
from   mytable
unpivot
(
  period
  for months in (
    "October 2019",
    "November 2019",
    "December 2019",
    "January 2020",
    "February 2020",
    "March 2020"
  )
)
pivot
(
  avg(period) 
  for PROD_SKU in ('ABC123','DEF456')
)
order by 1;
 

Затем new_table содержит:

 SELECT * FROM new_table;
 
месяцы «ABC123» «DEF456»
Декабрь 2019 года 12 22
Февраль 2020 года 14 24
Январь 2020 года 13 23
Март 2020 года 15 25
Ноябрь 2019 года 11 21
Октябрь 2019 года 10 20

бд<>скрипка <>здесь