Oracle: несколько столбцов Pivot в одной и той же цифре c - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть следующие данные:

Vehicle ID        Region      District     City       Revenue
   X50          Southwest      FLD        Miami         50
   X50          Northeast      NYC        Rochester     70
   X70          Southwest      FLD        Miami         20

Я хочу повернуть область, район и город с помощью столбца Доход.

Вывод:

Vehicle ID        Southwest_R   Northeast_R   FLD_R       NYC_R    Miami_R     Rochester_R
  X50                 50           0            50           0         50         0
  X50                  0           75           0            75         0         75
  X70                  20          0            25           0         25          0

Проблема, с которой я сталкиваюсь, состоит в том, чтобы добавить эти точки в один запрос.

 Select * from table
 Pivot( SUM(Revenue) for Region IN ('Southwest' Southwest_R, 'Northeast' Northeast_R))

в этом запросе, если я добавлю Район и Город, он выдаст ошибку.

1 Ответ

0 голосов
/ 28 апреля 2020

Хммм. , , Это выглядит как условная логика c, а не агрегация:

select vehicle_id,
       (case when region = 'Southwest' then revenue else 0 end) as southwest_r,
       (case when region = 'Northeast' then revenue else 0 end) as northeast_r,
       (case when district = 'District' then revenue else 0 end) as fld_r,
       (case when district = 'NYC' then revenue else 0 end) as nyc_r,
       . . .
from t;

Если вы можете иметь несколько строк на транспортное средство, то вы можете использовать агрегацию:

select vehicle_id,
       sum(case when region = 'Southwest' then revenue else 0 end) as southwest_r,
       sum(case when region = 'Northeast' then revenue else 0 end) as northeast_r,
       sum(case when district = 'District' then revenue else 0 end) as fld_r,
       sum(case when district = 'NYC' then revenue else 0 end) as nyc_r,
       . . .
from t
group by vehicle_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...