首页 > 解决方案 > Oracle SQL - 使用所需的不同列来透视列

问题描述

我有以下数据

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

我需要旋转问题列,因此对于每个 Vehicle_ID、Date 我们都有一行。但问题是每个 Vehicle_ID 的问题计数,日期从 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

我尝试了基本支点,但没有用

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

标签: oracle

解决方案


如果您知道一辆车最多有 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

推荐阅读