SQL 如何实现动态的行列转置
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,Oracle 和新版 Mysql 里有 pivot 实现行列转置,但实际处理数据时,会碰到一些更复杂的转置情况,pivot 也搞不定,比如:想转置成:这个难点在于事先不知道有多少种收入来源,而且每个人
千家信息网最后更新 2025年02月01日SQL 如何实现动态的行列转置
Oracle 和新版 Mysql 里有 pivot 实现行列转置,但实际处理数据时,会碰到一些更复杂的转置情况,pivot 也搞不定,比如:
想转置成:
这个难点在于事先不知道有多少种收入来源,而且每个人的收入来源种类各不相同。先得计算出种类个数,根据个数动态生成表结构,然后按照顺序填充每个人的多个收入数据。
SQL 的计算过程不提倡分步,对集合操作支持的也不彻底,很难应付这种多步骤复杂计算。
如果用集算器的 SPL 语言来处理,就能轻松实现:
A | B | |
1 | =connect("db") | =A1.query("select * from Income") |
2 | =B1.group(Name) | =A2.max(~.len()) |
3 | =create(Name,${B2.("Source"+string(~)+",Income"+string(~)).concat@c()}) | |
4 | for A2 | =A4.Name|A4.conj([Source,Income]) |
5 | >A3.record(B4) |
A3 格子根据原始数据得到期望数据结构的空表;B4 格子得到每个人要填充入空表的数据。
如果不用复杂计算得到结果列,只是根据某个字段值动态生成列,直接用 pivot 函数就可以;具体的列都不用指定,根据字段值自动生成:
=connect("mysqlDB").query("select * from t").pivot(g1;g2,f)。
除了动态行列转置,还有双向转置、转置同时存在列间运算等复杂转置需求,这些计算用 SPL 都容易编写出来,参考 《转置》。
集算器 SPL 是解决 SQL 难题的专业脚本语言,它语法简单,符合自然思维,是天然分步、层次清晰的面向过程计算语言。它采用与数据库无关的统一语法,编写的算法可在数据库间无缝迁移。它是桌面级计算工具,即装即用,配置简单,调试功能完善,可设置断点、单步执行,每步执行结果都可查看。请参阅 SQL 解题手
当数据不在数据库里时,SPL 执行复杂计算仍然方便:
=file("d:/t.csv").import(;,",").pivot...
SPL能很方便地嵌入到JAVA应用,可参考 《Java 如何调用 SPL 脚本》。
具体使用方法可参考 《如何使用集算器》。
数据
复杂
动态
收入
数据库
语言
参考
生成
行列
不用
个数
字段
来源
格子
种类
结构
结果
脚本
语法
过程
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上网显示服务器出了问题
保护网络安全培训课
如何导入共享数据库
开启本地数据库服务器
在用户访问数据库数据的过程中
房产三维软件开发
网络技术公司的号码是多少
沈阳科技学院互联网金融学费
数据库mysql查询索引优化
服务器操作系统安全更新
虹口区数据软件开发信息中心
mir4服务器断开连接104
嵌入式软件开发重庆飞摩纳哥
服务器托盘能放几台服务器
网络安全股票前景
网络安全运维工作主要做什么
初三网络安全教育观后感
上海网络安全官方平台
南昌软件开发公司有哪些招人
郑州灵睿网络技术有限公司
网络安全知识展板
宝鸡渭滨分局网络安全保卫大队
服务器怎么做热备
游戏软件开发大脑缺氧
工信部网络安全产业征求意见
多媒体教学软件开发
java 服务器间通讯
深圳云盟互动网络技术
看视频显示无法联接服务器
服务器电脑装什么系统