SQL 如何实现动态的行列转置[亲测有效]

SQL 如何实现动态的行列转置[亲测有效]Oracle 和新版 Mysql 里有 pivot 实现行列转置,但实际处理数据时,会碰到一些更复杂的转置情况,pivot 也搞不定,比如: 想转置成: 这个难点在于事先不知道有多少种收入来源,而且…

SQL 如何实现动态的行列转置

Oracle 和新版 Mysql 里有 pivot 实现行列转置,但实际处理数据时,会碰到一些更复杂的转置情况,pivot 也搞不定,比如:

1png

想转置成:

2png

这个难点在于事先不知道有多少种收入来源,而且每个人的收入来源种类各不相同。先得计算出种类个数,根据个数动态生成表结构,然后按照顺序填充每个人的多个收入数据。

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 脚本》

具体使用方法可参考 《如何使用集算器》

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8196.html

(0)
上一篇 2023-03-05
下一篇 2023-03-06

相关推荐

  • 如何在Windows上安装Python

    如何在Windows上安装PythonPython是一种非常实用和流行的编程语言,它是简单易学的,并且可以满足各种需求,例如数据分析、科学计算、Web开发等。Python可以在各种操作系统上运行,包括Windows、Linux、macOS等。在本文中,我们将学习如何在Windows上安装Python。

    2024-09-05
    22
  • SQL Server解惑——对象命名的唯一性小结

    SQL Server解惑——对象命名的唯一性小结关于SQL Server数据库中的对象命名的唯一性问题。例如表、索引、约束等数据库对象,有时候DBA在做数据库维护时,经常要创建对象或重命名对象,此时就会遇到一个问题,对象命名的唯一性问题。虽然是一个

    2023-01-30
    149
  • Python中将元组转换为列表的方法

    Python中将元组转换为列表的方法Python中元组(tuple)和列表(list)是两种具有不同性质的序列类型。在某些情况下,需要将元组转换为列表,因为列表在某些操作中具有更好的可变性和处理性能。本文将详细介绍Python中将元组转换为列表的方法,包括使用列表解析、使用typecasting、使用extend方法、使用list构造函数以及使用循环遍历等方法。

    2024-03-26
    88
  • Python join方法若干实例初探

    Python join方法若干实例初探在Python开发中,我们经常需要将多个字符串连接起来,这时常常需要用到字符串的join方法。Python的join方法可以非常方便地连接字符串,本文将从多个示例入手,详细说明join方法的使用。以下为丰富join方法知识的几种实例:

    2023-12-28
    122
  • 使用jsreplace方法替换文本内容

    使用jsreplace方法替换文本内容在开发网站和应用程序时,经常需要对文本内容进行替换操作。有时候,我们需要替换特定的单词或短语,有时候需要替换大段的文本。使用JavaScript的replace方法可以帮助我们轻松实现这一功能。

    2024-08-09
    27
  • 使用MongoDB查询版本信息

    使用MongoDB查询版本信息a href=”https://beian.miit.gov.cn/”苏ICP备号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-08-30
    22
  • 腾讯云数据库SaaS致力于构建数据库分布式云,为更多更广的用户提供服务「终于解决」

    腾讯云数据库SaaS致力于构建数据库分布式云,为更多更广的用户提供服务「终于解决」大数据时代,数据库 SaaS 是企业实现降本增效和业务创新的重要抓手。在腾讯全球数字生态大会数据库 SaaS 专场上,腾讯云发布了多项数据库 SaaS 产品能力升级,并重点分享了其在上云、日常运维、数

    2023-06-18
    152
  • ORACLE ANALYZE使用小结「建议收藏」

    ORACLE ANALYZE使用小结「建议收藏」ANALYZE的介绍 使用ANALYZE可以收集或删除对象的统计信息、验证对象的结构、标识表或cluster中的行迁移/行链接信息等。官方文档关于ANALYZE功能介绍如下: · Colle

    2023-01-26
    139

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注