oracle - Oracle SQL 多级数据透视组
问题描述
编辑:对于那些说这是一个明确而明显的“否”的人:当然,我认为是这种情况,并且分层标题超出了 SQL 查询结果的范围。但是,除了一些 Mysql 工作之外,我刚刚从旧的遗留 SQL Server 2000 平台跳转到 Oracle 12g,并在那里找到了我在 SS 2000 中无法想象的事情,所以我想我会问。我编写了大量的 SQL 来在一些报告创建系统中提供我的表示层,因此我正在探索从 SS 2000 开始的能力飞跃。
我可能对 Oracle Pivot 功能提出了太多要求,但这正是我想要做的。我可以在单个级别进行透视,但我想要一个具有多个度量的列分组层次结构,就像您可以在电子表格交叉表中轻松完成的那样。这是示例数据和所需的输出:
select *
from(
select 'A' rws, 'X' cols, 2 v1, 90 v2 from dual union
select 'A' rws, 'Y' cols, 25 v1, 112 v2 from dual union
select 'A' rws, 'Y' cols, 7 v1, 64 v2 from dual union
select 'B' rws, 'X' cols, 4 v1, 117 v2 from dual union
select 'B' rws, 'Y' cols, 46 v1, 32 v2 from dual union
select 'B' rws, 'X' cols, 0 v1, 18 v2 from dual
)
这是我想要的输出:
-----------------------------------------------------------
| A | B |
-----------------------------------------------------------
| X | Y | X | Y |
-----------------------------------------------------------
| v1 | v2 | v1 | v2 | v1 | v2 | v1 | v2 |
-----------------------------------------------------------
| 2 | 90 | 32 | 176 | 4 | 135 | 46 | 32 |
-----------------------------------------------------------
解决方案
当然,您可以根据需要对数据进行透视,但您需要自己格式化表头,因为 Oracle 会返回标准表数据:
select *
from(
select 'A' rws, 'X' cols, 2 v1, 90 v2 from dual union
select 'A' rws, 'Y' cols, 25 v1, 112 v2 from dual union
select 'A' rws, 'Y' cols, 7 v1, 64 v2 from dual union
select 'B' rws, 'X' cols, 4 v1, 117 v2 from dual union
select 'B' rws, 'Y' cols, 46 v1, 32 v2 from dual union
select 'B' rws, 'X' cols, 0 v1, 18 v2 from dual
) t
pivot
(
max(v1) as v1_,max(v2) as v2_
for (rws,cols) in (
('A','X') as A_X,
('A','Y') as A_Y,
('B','X') as B_X,
('B','Y') as B_Y
)
);
结果:
A_X_V1_ A_X_V2_ A_Y_V1_ A_Y_V2_ B_X_V1_ B_X_V2_ B_Y_V1_ B_Y_V2_
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
2 90 25 112 4 117 46 32
推荐阅读
- amazon-web-services - 在亚马逊的 ECS 中删除旧容器版本之前的自定义挂钩
- android - 带有 app:autoSizeTextType=uniform 和 Lollipop 的线性布局和文本
- javascript - Kinvey 无法在 iPhone 和 iPad 上运行
- validation - spring mvc休眠验证器不工作
- bash - 在用户响应命令中嵌入变量
- sql - 在 Join 中使用 Rank 函数
- python - Selenium 和 Python 到可执行文件
- php - PHP - 如何让应用程序读取美化的语言环境 uri 参数?
- bash - 检查为 git commit 暂存的任何文件是否与白名单不匹配
- java - 休眠验证器注释不适用于spring mvc