sql - Oracle SQL将sql行转换为按另一列分组的列
问题描述
我在为以下场景设计 SQL 时遇到了麻烦。
我的表结构看起来像这样
表 ISK
id | key | value | group_id
1 | k1 | a1 | g1
2 | k2 | a2 | g1
3 | k3 | a3 | g1
4 | k1 | b1 | g2
5 | k2 | b2 | g2
6 | k3 | b3 | g2
如您所见,我为每个组 ID 存储了 3 个键。每个 group_id 的值将不同。我需要通过以下方式在报告中显示此信息。
k1 | k2 | k3
a1 | a2 | a3
b1 | b2 | b3
键将成为列标题,每一行将对应一个 group_id
解决方案
使用枢轴
WITH CTE1 AS(
SELECT KEY, VALUE FROM TABLE1)
SELECT * FROM CTE1
PIVOT (MAX(VALUE) FOR KEY IN ('k1', 'k2', 'k3'))
UNION
SELECT * FROM CTE1
PIVOT (MIN(VALUE) FOR KEY IN ('k1', 'k2', 'k3'));
推荐阅读
- django - Django从视图执行shell脚本而不是等到执行的脚本完成
- javascript - 我正在尝试制作一个下拉侧边栏菜单
- javascript - 从应用程序内的选项卸载 apk (React Native)
- apache - 如何从 Web 服务器提供 wbn(WebPackage/WebBundle)文件?
- python - 是否可以使用花括号创建冻结集
- php - 尝试使用 Braintree 在 Laravel 上提交付款
- c# - 系统托盘中的图标不会消失,直到我将鼠标悬停在它上面
- terraform - Terraform:如何在 AKS 群集的第二个负载均衡器中配置后端池 VM 规模集
- jmeter - 在发送到采样器之前编辑 CSV 数据
- python - 创建非标准 pandas 频率(“dekads”= 每月 3 个周期)