Oracle SQL - необходимо поворачивать столбцы с различными столбцами - PullRequest
0 голосов
/ 09 апреля 2020

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

Vehicle_ID       Date            Problem
 X500         01/01/2020      Engine Oil
 X500         01/01/2020        Brake
 X500         01/01/2020      Dynamic Brake
 X500         01/01/2020         RPM
 X500         01/02/2020      Dynamic Brake
 X500         01/02/2020         RPM

Мне нужно Pivot столбца проблемы, чтобы для каждого идентификатора Vehicle_ID, Date у нас была одна строка. Но проблема заключается в количестве проблем для каждого идентификатора транспортного средства. Дата варьируется от 2 до 30.

Ожидаемый результат -

Vehicle_ID      Date       Problem_1     Problem_2     Problem_3    Problem_4      Problem_5     ....
  X500        01/01/2020   Engine Oil      Brake     Dynamic Brake     RPM           
  X500        01/01/2020   Dynamic Brake    RPM

Я пробовал базовый c пивот, но это не так работа

Select * from table1
PIVOT(
       Problem
       FOR (Problem) IN (SELECT DISTINCT Probelm FROM table1)
     )

Ответы [ 2 ]

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

Если вы знаете, что на одну машину в день приходится не более 30 строк, вы можете использовать PIVOT следующим образом:

select *
from (select vehicle_id, date, problem,
             row_number() over (partition by vehicle_id, date order by problem) as rn
      from your_table
     ) 
pivot (max(problem) for rn in (1,2,3,4,...., 29,30))
0 голосов
/ 09 апреля 2020

Если вы знаете, что для транспортного средства существует до 30 проблем, вы можете создать столько столбцов. Я бы использовал условную агрегацию:

select vehicle_id, date,
       max(case when seqnum = 1 then problem end) as problem_1,
       max(case when seqnum = 2 then problem end) as problem_2,
       . .  
       max(case when seqnum = 30 then problem end) as problem_30
from (select t.*,
             row_number() over (partition by vehicle_id, date order by problem) as seqnum
      from table1
     ) t1
group by vehicle_id, date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...