Oracle: как сделать сводный запрос? - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть такая таблица:

Таблица1: ID число, Продукт varchar2, Аргумент varchar2, Значение AnyData

Когда он заполнен, он выглядит так:

enter image description here

Я хотел бы создатьпредставление, такое как результат:

enter image description here

Я попытался следующий запрос:

select * from 
(select ARGUMENT, VALUE from Table)
pivot 
(first(VALUE) for ARGUMENT in ('Weight','Size','First Use'))

Я попытался с обеими функциями агрегирования: Первый и Макс.

Для них обоих я получаю следующие ошибки:

  • ORA-56902: ожидаем статистическую функцию внутри операции поворота.
  • ORA-22950: невозможно ЗАКАЗАТЬ объекты без метода MAP или ORDER.

Я понимаю, обе эти ошибки.Сводный запрос может работать следующим образом.

Но кто-нибудь знает другой способ достижения требуемого результата, пожалуйста?

Спасибо.Cheers,

1 Ответ

0 голосов
/ 26 декабря 2018

Я бы использовал функцию с условием с усечением, чтобы выполнить поворот.

select Product,
       MAX(CASE WHEN ARGUMENT = 'Weight' THEN "VALUE" END) Weight,
       MAX(CASE WHEN ARGUMENT = 'Size' THEN "VALUE" END) Size,
       MAX(CASE WHEN ARGUMENT = 'First Use' THEN "VALUE" END) FirstUse
from 
(
    select 
        Product,
        ARGUMENT, 
        "VALUE"
    from Table
) t1
GROUP BY Product

Если вы используете ту же таблицу, вы можете попробовать выбрать таблицу вместо подзапроса напрямую.

select Product,
       MAX(CASE WHEN ARGUMENT = 'Weight' THEN "VALUE" END) Weight,
       MAX(CASE WHEN ARGUMENT = 'Size' THEN "VALUE" END) Size,
       MAX(CASE WHEN ARGUMENT = 'First Use' THEN "VALUE" END) FirstUse
from Table 
GROUP BY Product
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...