sql - 如何在 Oracle 上透视此表?
问题描述
你能帮我弄清楚如何旋转这个表:
╔═══════════╦═════════════╦══════╦════════╦════════╗
║ Big Group ║ Small Group ║ Kids ║ Adults ║ Elders ║
╠═══════════╬═════════════╬══════╬════════╬════════╣
║ 1 ║ 1 ║ 10 ║ 20 ║ 5 ║
║ 1 ║ 2 ║ 15 ║ 10 ║ 10 ║
║ 2 ║ 1 ║ 20 ║ 0 ║ 15 ║
╚═══════════╩═════════════╩══════╩════════╩════════╝
变成这样的事情?
╔═══════════╦═════════════╦══════╦════════╦════════╦═════════════╦══════╦════════╦════════╗
║ Big Group ║ Small Group ║ Kids ║ Adults ║ Elders ║ Small Group ║ Kids ║ Adults ║ Elders ║
╠═══════════╬═════════════╬══════╬════════╬════════╬═════════════╬══════╬════════╬════════╣
║ 1 ║ 1 ║ 10 ║ 20 ║ 5 ║ 2 ║ 15 ║ 10 ║ 10 ║
║ 2 ║ 1 ║ 20 ║ 0 ║ 15 ║ ║ ║ ║ ║
╚═══════════╩═════════════╩══════╩════════╩════════╩═════════════╩══════╩════════╩════════╝
每个 Big group 的小组数量是可变的,这就是我难以理解的地方。
谁能帮我?提前致谢
解决方案
有一种方法,但使用的开销PIVOT
是提供需要旋转的所有值的列表。
由于您还需要对每个小组进行透视,我们需要在大组和小组之间创建一个虚拟列,以便在透视子句中使用,如下所示
with table1
as
(select 1 bg
,1 sg,10 kids
,20 adult
from dual
union all
select 1,2,15,25 from dual
union all
select 2,1,20,0 from dual
)
select *
from
(
select t1.*,t1.bg||'_'||t1.sg piv
from table1 t1
)
pivot
(
max(sg) sg,max(kids) kids,max(adult) adult
for piv in ('1_1' as bg1_sg1
,'1_2' as bg2_sg2
,'2_1' as bg2_sg1)
)
order by bg
推荐阅读
- python - MongoDB 安装需要与 pymongo 一起使用吗?
- vim - :source $MYVIMRC 不适用于我的原始缓冲区
- android - 当从手机短信屏幕按下短信导航返回时,如何使应用程序恢复状态?
- regex - 带有教义“错误:无效的 PathExpression。必须是 StateFieldPathExpression”的正则表达式。
- python - QSettings 与仅使用字典相比有什么优势?
- django-rest-framework - 成功 TokenAuthentication 后 core-api 请求不包括用户
- c# - 使用 Simple Injector 注入 SignalR 集线器
- php - Yii2 提交表单开始下载视图文件
- macos - MacOS 上的 OpenMPI:意外 IP
- kubernetes - Minikube 中的默认 CNI