1.前言 最近因项目需求,需要把员工的工作组返回给前台,但是数据库是把员工的工作组Id,都存在一个字段内了(以ldquo;逗号

1.前言

最近因项目需求,需要把员工的工作组返回给前台,但是数据库是把员工的工作组Id,都存在一个字段内了(以“逗号”分隔),而这样不符合前台的需要,他们需要一行,一行的数据。如:

数据库:

userId, workgroup,4,5

前台需要:

userId, workgroup

2. 分析思路:

大体的思路是这样的:

首先:要知道,每一员工最多有多少个组。

其次:建一个有关“数”的临时表,与上面的组数进行关联,这样就出现了“多”行

最后:多“行”有了,剩下的就是对每一行的组进行刷选。如第一行取第一个逗号左边的,,第二行取第二个逗号左边的, 依此类推。

3. 实现:

根据上次的思路,来实现:

第一步:

userId,workgroups fromdualuserId,workgroups fromdual

)workgroups tempgroups,length(workgroups ) )), 0) AS groupcount FROM v_usergroups

PS: 这里在"workgroup" 的前后也加了逗号,是为了后面使用方面。

第二步:

PS:这里的5,我们是根据业务需要,每一员工最多分为5个组,当然也可以写其他的值,但一定要大于第一步求得的"groupcount".

到这里后,我们对这两个表进行关联,看看值怎么样:

userId,workgroups fromdualuserId,workgroups fromdual

)(workgroups tempgroups,length(workgroups ) )), 0) AS groupcount FROMv_usergroups ) a,

() b where b.lv<=a.groupcountorder by userid,lv

USERID TEMPGROUPS GROUPCOUNT LV,,,,,2,4,5, 3 3

到这里,就离我们最终的结果很近了。 只需要在外层对"tempgroups"做一下简单的处理就可以了:

第三步:

这一步的主要思路就是:截串。第一个组应该是第一逗号和第二个逗号之间的值,第二个组应该是第二个逗号与第三个逗号之间的值,那第一个,和第二个如何表示呢,其实就是利用字段lv。也就是:

substr(tempgroups,instr(tempgroups, ',', 1, lv) + 1,instr(tempgroups, ',', 1, lv + 1) - (instr(tempgroups, ',', 1, lv) + 1))

最后的SQL 如下:

userId,workgroups fromdualuserId,workgroups fromdual

), , , 1, lv) + 1)) from(workgroups tempgroups,length(workgroups ) )), 0) AS groupcount FROMv_usergroups ) a,

() b where b.lv<=a.groupcountorder by userid,lv

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

mysql 把一列转多行_Oralce 按分隔符把一列转成多行相关推荐

  1. mysql根据分隔符将一行数据拆分成多行数据

    mysql根据分隔符将一行数据拆分成多行数据 文章目录 mysql根据分隔符将一行数据拆分成多行数据 关键函数 原始数据 处理结果展示 三种方式,相同的原理 使用MySql库中的自增序列表 自建自增序 ...

  2. mysql分隔字符串转变为多行_【mysql】将以固定分隔符分隔的字符串转成多行的形式...

    背景 近期在做用户标签项目,目前标签的存储是用户id,标签ids(每个标签以,形式存储) 的形式,但是如果想统计前后两天标签的变化,使用find_in_set函数,一方面查询速度慢(因为不能使用索引) ...

  3. 单元格内多个姓名拆分成一列_excel将一列数据拆为多个表格-excel:如何将一个单元格拆分成多行或多列?...

    如何将一个Excel工作表的数据按一列的关键字拆分成... 工具/材料:Microsoft Office Excel2016版,Excel文档. 1.首先选中Excel文档,双击打开. 2.然后在该界 ...

  4. 【mysql快速入门】牛客网:查询所有列查询多列查询结果去重查询结构返回限制行数将查询后的列重新命名

    题目:现在运营想要查看用户信息表中所有的数据,请你取出相应结果 示例:user_profile id device_id gender age university province 1 2138 m ...

  5. mysql select 常量列_不使用临时表,仅使用select实现查询出多行常数

    今天在做项目的时候,突然需要insert到数据库中多条记录,但这些记录必须用一条insert语句插入数据库,这时候你会说可以用insert into XXX select XXX句式,但更让人纠结的是 ...

  6. mysql中的extra是什么意思_1130mysql explain中的type列含义和extra列的含义

    很多朋友在用mysql进行调优的时候都肯定会用到explain来看select语句的执行情况,这里简单介绍结果中两个列的含义. 1 type列 官方的说法,说这列表示的是"访问类型" ...

  7. 数据库中的 【行式存储】和【列式存储】

    传统的关系型数据库,如 Oracle.DB2.MySQL.SQL SERVER 等采用行式存储法(Row-based),在基于行式存储的数据库中, 数据是按照行数据为基础逻辑存储单元进行存储的, 一行 ...

  8. mysql中根据部门名称生成部门简称(根据某一列的关键字在另一列生成特定值)

    使用目的 利用mysql的语句将数据库中的某些东西替换掉,达到批量修改前台数据的目的 注意,马智较菜,使用的语句相对简单,本文主要作用是记录马智曾经遇到的问题,避免浪费时间再次寻找解决办法,如果有幸能 ...

  9. 传统的行存储和(HBase)列存储的区别

    1 为什么要按列存储 列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的.简单来说两者的区别就是如何组织表(翻译不 ...

最新文章

  1. Delphi XE5 for Android (十)
  2. 数据中心液体冷却技术的五个主要关注点
  3. 成功解决 This graphics driver could not find compatible graphics hardware. You maycontinue installation,
  4. 阿里云对象存储OSS支持版本管理特性
  5. c语言self用法,C/C++知识点之Self Numbers C语言 UVA640
  6. 小米笔记本引导修复_知识帖,笔记本电脑不能开机?你可以试试这些办法
  7. java资源文件获取属性_Java读写资源文件类Properties
  8. 稀疏矩阵转为稠密矩阵
  9. PHPDesigner默认编码方式
  10. 腾讯云内容分发网络 CDN 产品认证课程笔记(二)——腾讯云CDN介绍
  11. R语言-豆瓣电影top250数据爬取和分析
  12. 【愚公系列】2023年01月 .NET CORE工具案例-基于SqlSugar的多库多表融合查询
  13. Android6.0以上系统搜索不到 蓝牙BLE 设备问题
  14. Java精品项目源码第109期精美风在线音乐网站
  15. Juc_并发编程目录
  16. 【数学】第二型曲线积分
  17. 小米门卡协议加载失败_小米手机门禁卡空白卡开通步骤及写入激活方法
  18. 计算机内部为什么采用二进制表示数据,计算机内部为什么使用二进制处理数据? - 问答库...
  19. 如何证明凸函数的局部极小值为全局极小值
  20. ASP如何计算中英文混合字符串长度和截取字符串

热门文章

  1. 51Nod-1049 最大子段和【DP】
  2. 点乘和叉乘及其物理意义(C++STL实现)
  3. 解析几何 —— 椭圆
  4. Python 进阶 —— 使用修饰器执行函数的参数检查
  5. Python Tricks(一)—— np.where 与最大最小截断
  6. 机器学习基础(五十七)—— 监督学习、无监督学习
  7. 排序——冒泡排序及其改进版本
  8. python中的选择结构语句是语句_选择结构-if语句和if...else语句
  9. python入门-Python入门之类(class)
  10. python免费网课-python网课资源