oracle - 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)
)
解决方案
如果您知道一辆车最多有 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
推荐阅读
- powerbi - 折线图 Power BI 中的移动平均线
- c# - 允许此预编译站点可更新 Visual Studio 2019
- windows - 如何通过 PowerShell 或 java 在 Windows 资源管理器中获取“状态”列值
- c++ - 在 2D 向量上执行单行算术以找到简化的行形式 C++
- vue.js - 如何定位编辑按钮?
- c# - ASP.NET MVC 中的 Ajax 重定向
- java - 如何在 Room Android 中使用具有多个实体的单个模型?
- docker - Docker 文件更新量
- flutter - Flutter - 健康包未加载 STEP 数据
- c# - 在 List.ForEach 中声明 Func<> 会导致内存泄漏并增加进程内存吗?