sql - 如何在 Oracle SQL 中将动态行转换为列
问题描述
我的数据如下:-
Item_ID 活动
1“店内”
1“在线”
1“商场”
1个“商店”
2“旗舰”
2“目的地”
我想将行转换为列,如下所示: -
Item_ID Column_1 Column_2 Column_3 Column_4
1 “店内” “网上” “商城” “商店”
2“旗舰”“目的地”
请有人指导我如何在 Oracle SQL 中执行上述操作?我已经尝试过 PIVOT 函数,但它需要静态(硬编码)值列表。
一个项目最多可以有 4 个活动,但活动中的值可以是任何值(我在活动列中有 135 个唯一值,活动列表是动态的)。
解决方案
您可以为每个项目 ID 的每个活动分配一个排名/行号:
select item_id, activity,
row_number() over (partition by item_id order by activity) as rn
from your_table
然后将该值用于枢轴:
select *
from (
select item_id, activity,
row_number() over (partition by item_id order by activity) as rn
from your_table
)
pivot (max(activity) for (rn) in (1, 2, 3, 4))
ITEM_ID | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | 有存货 | 购物中心 | 在线的 | 商店 |
2 | 目的地 | 旗舰 |
实际活动值无关紧要,枢轴仅基于数值。如果需要,这也可以很容易地显示第五列 - 只需将 5 添加到列表中。
如果每个项目的活动顺序很重要,那么您需要在order by
子句中指定;仅从您提供的两列中,没有其他要排序的内容,因此我将它们按字母顺序排列,但是您可能还有其他规则和数据可以让您进行其他排序。
推荐阅读
- python - 当我运行这个程序时,它不接受第二个用户输入并自动使 First_User_Input == Second_User_Input
- r - 如何返回最大nrow数据帧列表?
- javascript - 加载页面时添加 animate.css 类
- mongodb - 如何聚合数组中的百分比?
- python - 实现 Pixel RNN 的 RowLSTM pytorch 的前向传递
- python - Keras Dense layer shape error
- excel - 从Powershell启动时,VBA中的“对象'工作簿'的方法'打开'失败”,但直接从Excel调用时工作
- angular - 如何使用路径如 http://myapp/mycontextpath 的路由在 Cloud Foundry 上部署 Angular 应用程序?
- r - 在循环内导出 Keras 训练历史图
- console - 如何以绿色输出testcafe控制台日志?