广告
返回顶部
首页 > 资讯 > 精选 >如何用SQL实现字段拆分成多行
  • 196
分享到

如何用SQL实现字段拆分成多行

2023-06-03 15:06:38 196人浏览 八月长安
摘要

这篇文章给大家介绍如何用sql实现字段拆分成多行,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。把表中某字段根据分隔符拆分成N个字符串后,再用这N个字符串把这一行演变成N行。用SQL来解决这个问题非常烦琐!SQL里没有提

这篇文章给大家介绍如何用sql实现字段拆分成多行,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

把表中某字段根据分隔符拆分成N个字符串后,再用这N个字符串把这一行演变成N行。

用SQL来解决这个问题非常烦琐!

SQL里没有提供集合对象,不能提供根据拆分后的字符串集合把一行变成多行的操作。解决这个问题的思路就是先求出字段拆分后的最大字符串个数M,然后构造一个M行1列的临时表T2,其列名为lv,则各行lv值分别为1,2,……,M,然后用原表与之叉乘,叉乘时取字段拆分后的第T2.lv个字符串。这样写出来的SQL是多个子查询嵌套而成,其语法是比较复杂的。而且各种数据库中拆分字符串的函数并不统一,所以SQL的写法也各不相同。

举个例子:现有学生选修课数据表COURSES数据如下,要求查出每个学生选修了几门课:

COURSESTUDENTS
Chinese    Tom,Kate,John,Jimmy
Russia     Tom,Cart,Jimmy
Spanish    Kate,Joan,Cart
Portuguese John,Tom
History    Tom,Cart,Kate
Music      Kate,Joan,Tom

要求输出结果如下:

STUDENTNUM
Tom5
Kate4
Cart3
Jimmy2
Joan2
John2

oracle为例,用SQL写出来是这样:

SELECT STUDENT, COUNT(*) NUM FROM

       (SELECT T1.COURSE, REGEXP_SUBSTR(T1.STUDENTS, '[^,]+', 1, T2.LV ) STUDENT

       FROM COURSES T1,

              ( SELECT LEVEL LV

                 FROM (SELECT MAX(REGEXP_COUNT(A.STUDENTS, '[^,]+', 1)) R_COUNT

                         FROM COURSES A

              ) B

               CONNECT BY LEVEL <= B.R_COUNT) T2

        WHERE REGEXP_SUBSTR(T1.STUDENTS, '[^,]+', 1, T2.LV) IS NOT NULL

       ) C

GROUP BY STUDENT

ORDER BY NUM DESC;

这里的C就是前文提到的那个临时表,可见这个SQL层次很多,可读性比较差,不易读懂。

如果用集算器的SPL语言来解决这个问题,就会简单很多,只需1行代码:

connect("mydb").query("SELECT * FROM COURSES").news(STUDENTS.split@c();~:STUDENT).groups(STUDENT;count(1):NUM).sort(-NUM)

SPL语言有集合对象,并提供了根据集合把一行扩展成多行的功能,所以写起来思路清晰明了,简便易懂,并且语法统一,不论数据来自哪种数据库还是来自文件型数据源,写法都是一样的。

关于如何用SQL实现字段拆分成多行就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 如何用SQL实现字段拆分成多行

本文链接: https://www.lsjlt.com/news/234714.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何用SQL实现字段拆分成多行
    这篇文章给大家介绍如何用SQL实现字段拆分成多行,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。把表中某字段根据分隔符拆分成N个字符串后,再用这N个字符串把这一行演变成N行。用SQL来解决这个问题非常烦琐!SQL里没有提...
    99+
    2023-06-03
  • pandas实现一行拆分成多行
    目录一行拆分成多行1.根据某一列拆分2.根据多列拆分一行转多行、多行转一行1.测试数据2.一行转多行3.多行转一行一行拆分成多行 1.根据某一列拆分 效果: 代码: if __n...
    99+
    2022-11-11
  • MySql字符串拆分实现split功能(字段分割转列、转行)
    字符串转多行 需求描述    实现的sql     案例演示 字符串拆分: SUBSTRING_INDEX(str, delim, count) 替换函数:replace( str, from_s...
    99+
    2023-09-05
    mysql
  • Oracle根据逗号拆分字段内容转成多行的函数说明
    目录使用场景1.业务表A2.实现拆分SQL3.REGEXP_SUBSTR函数1)参数说明2)案例4.REGEXP_REPLACE函数1)参数说明5.CONNECT BY函数1)基本语法2)案例6.LENGTH函数...
    99+
    2023-04-12
    oracle 逗号拆分 oracle用逗号拆分多列 oracle逗号拆分行
  • mysql group_concat如何实现把分组字段写成一行
    这篇文章给大家分享的是有关mysql group_concat如何实现把分组字段写成一行的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。功能:将group by产生的同一个分组中的...
    99+
    2022-10-18
  • .Net如何使用分表分库框架ShardingCore实现多字段分片
    小编给大家分享一下.Net如何使用分表分库框架ShardingCore实现多字段分片,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!原理我们现在假定一个很简单的场景,依然是订单时间按月分片,查询进行如下语句//这边演示不使用...
    99+
    2023-06-22
  • MySQL实现字段分割一行转多行的示例代码
    先看一下数据结构,我这里字段比较少,只弄了最重要的部分 根据我们上次学到的LEFT()函数进行分组 SELECT LEFT(provinces,6),CO...
    99+
    2022-11-13
  • SQL Server怎么实现将特定字符串拆分并进行插入操作
    这篇文章主要介绍“SQL Server怎么实现将特定字符串拆分并进行插入操作”,在日常操作中,相信很多人在SQL Server怎么实现将特定字符串拆分并进行插入操作问题上存在疑惑,小编查阅了各式资料,整理出...
    99+
    2022-10-18
  • Python字符串如何实现拆分与连接
    小编给大家分享一下Python字符串如何实现拆分与连接,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!拆分字符串在 Python 中,字符串表示为str对象,它们是不可变的:这意味着不能直接更改内存中表示的对象。这两个事实可...
    99+
    2023-06-22
  • MySql字符串拆分如何实现split功能
    这篇文章主要讲解了“MySql字符串拆分如何实现split功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySql字符串拆分如何实现split功能”吧!需求描述数据库中 num字段值为:...
    99+
    2023-06-30
  • mysql中如何将存在分隔符号的一列进行拆分,成为多行
    mysql中如何将存在分隔符号的一列进行拆分,成为多行 -- ****************************** 写在前面的说明 **********************************-- *************...
    99+
    2023-08-17
    mysql 数据库 sql
  • .Net使用分表分库框架ShardingCore实现多字段分片
    目录介绍项目地址背景原理直接开始添加依赖创建一个订单对象创建DbContext创建分片路由ShardingCore启动配置测试默认配置下的测试测试无路由返回默认值总结介绍 本期主角:...
    99+
    2022-11-12
  • Python中如何针对任意多的分隔符进行拆分字符串
    这篇文章给大家介绍Python中如何针对任意多的分隔符进行拆分字符串,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。我们需要将字符串拆分为不同的字段,但是分隔符(以及分隔符之间的空格)在整个字符串中并不一致。字符串对象的...
    99+
    2023-06-02
  • Java循环屏障中CyclicBarrier如何实现多线程分段等待执行完成
    Java循环屏障中CyclicBarrier如何实现多线程分段等待执行完成,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言工作中是否有这样的场景,多个线程任务...
    99+
    2023-06-25
  • SQL 如何查询每个分组都出现的字段值
    数据分组以后,要找出在每个分组中都出现的某个字段值。 用SQL来解决这个问题并不容易! SQL缺少单纯的分组操作,只能返回各分组的统计值,而不能对各组的成员再进行更细的交、差、并等集合运算。要解决这种问题就需要多层嵌套子查询来变相地实现...
    99+
    2016-08-07
    SQL 如何查询每个分组都出现的字段值
  • mssql如何实现指定字段编号sql语句
    小编给大家分享一下mssql如何实现指定字段编号sql语句,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!代码如下: select nid,ntitle,nre...
    99+
    2022-10-19
  • Java 详解循环屏障CyclicBarrier如何实现多线程分段等待执行完成
    前言 工作中是否有这样的场景,多个线程任务,如果所有线程完成到某个阶段,你希望知道所有线程均完成该阶段。当然你使用线程计数可以实现,只是不够优雅。 所以我即:Java 多线程等待优雅...
    99+
    2022-11-12
  • mysql如何实现替换字段部分内容
    这篇文章将为大家详细讲解有关mysql如何实现替换字段部分内容,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。[mysql]replace的用法1.replace...
    99+
    2022-10-18
  • MyBatis动态SQL如何实现前端指定返回字段
    目录动态SQL实现前端指定返回字段问题描述解决方案MyBatis如何返回部分字段.xml文件中resultMap的type改为第二种很笨的方法动态SQL实现前端指定返回字段 问题描述...
    99+
    2022-11-13
  • MYSQL: sql中某一个字段内容为用逗号分割的字符串转换成多条数据(适用于部分树机构)
    创建表的示例 CREATE TABLE tbl_name( id int(11) not null auto_increment, userName varchar(100) not nu...
    99+
    2023-08-17
    mysql sql 数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作