本文节选自松华老师《SQL优化专栏》

想内容请点击订阅专栏


今天,给大家带来的案例是,列转行和复制的相关案例。

但介绍之前,我们先简单的学习下,行转列,列转行

行转列,顾名思义,就是把几行数据变成一行或多行。

前提条件是,需要group by

如上,数据,我们把两行数据,变成一行。

下面的SQL 是根据emp_no的不同,把两行数据变成了一行

行转列的,最重要的一点是有个可以识别的列,这里是emp_no

还有就是,聚合函数和,case when 语句。

现在把行转列,之后的数据变成,两行数据的过程,叫做列转行。

如上面SQL 我们想把一行数据变成2行,需要有个2行数据的中间表,

然后进行笛卡尔积,在此基础上通过case when 语句变成我们想要的结果

以上就是,简单的行转列和列转行

我们在上面的,列转行的过程中,应用了复制的概念

需求如下

有如下两个表

想得到如下结果

我们从结果中,可以看出根据fn_a2的值,会复制那么多行,且fn_b1和fn_b2值显示一次,是根据fn_b3=1等于1的时候,fn_b3是根据fn_a2的值的大小,从1开始增大到fn_a2为止

从上面的SQL中,我们利用一个c 表,把a 表进行复制,复制的大小跟nf_a2的值一样

在这个基础上,我们只需要left outer join Table_b 表就行了

这个跟我们的最后的结果只差一步了,就是fn_b1,fn_b2 显示的有点多了

我们只需要在fn_b3=1的时候显示就行了

这样我们就得到了,我们想要的结果,这里还有个小瑕疵的话就是null

这个可以用ifnull函数替换就可以

这样就跟需求一样。

我们平时,会碰到各种奇葩需求,但是我们不用烦恼,SQL如同解数学题一样,只要掌握核心部分,剩下的就迎刃而解。

谢谢大家~ 欢迎转发

我是知数堂SQL优化班老师 - 郑松华

如有关于SQL优化方面疑问需要交流的,请加入QQ群(579036588),@骑兔子的龟 就可与我联系


END


点击下图小程序订阅《SQL优化专栏》get更多优化技能

扫码加入MySQL技术Q群

(群号:579036588)

有趣的SQL(三)行转列,列转行和复制相关推荐

  1. mysql 复杂行转列_有趣的SQL(四) 行转列的复杂应用和优化思想

    原标题:有趣的SQL(四) 行转列的复杂应用和优化思想 导读 本文节选自松华老师<SQL优化专栏> 大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子 在之前的的系列文章:有趣的SQL ...

  2. 多列转多行sql oracle,sql多行转多列,中文没办法聚集的有关问题

    sql多行转多列,中文没办法聚集的问题? 我要将下表 选项      答案       姓名 爱好      篮球       bruce 年龄      28        bruce 性别     ...

  3. mysql 复杂行转列_有趣的SQL(4) 行转列的复杂应用和优化思想

    大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子 在之前的的系列文章中,有意思的SQL(3) 行转列,列转行和复制 已经给大家介绍了,行转列,列转行,复制等方法. 在这篇文章中,对其进行更深一层 ...

  4. SQL优化大神带你写有趣的SQL(6) SELF JOIN的应用

    大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子 今天给大家,带来的是 SELF JOIN的应用 下面是,表结构和,INSERT 语句脚本. create table t0718 (idx in ...

  5. SQL Server 行转列,列转行

    一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name ,value = ( STUFF(( SELECT ',' + val ...

  6. SQL Server 行转列,列转行。多行转成一列

    一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name ,value = ( STUFF(( SELECT ',' + val ...

  7. oracle 行转列sql语句,行转列(sql行转列)

    sql语句行转列?怎么转啊 select MIN(id) as ID, name, sex, sum(case when num=2 then 2 end) as num2, sum(case whe ...

  8. 做图表统计你需要掌握SQL Server 行转列和列转行

    原文:做图表统计你需要掌握SQL Server 行转列和列转行 说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需 ...

  9. sql拼接同一字段中的数据_用SQL将Oracle中同一列的多行记录拼接成一个字符

    用SQL将Oracle中同一列的多行记录拼接成一个字符串 用SQL将Oracle中同一列的多行记录拼接成一个字符串 [sql] -- 原始数据 -- a   111 -- b   222 -- a   ...

最新文章

  1. 潜移默化学会WPF--绘图 学习(一)
  2. python项目面试_Python面试中最常见的25个问题-结束
  3. struts导出txt文件
  4. STL容器底层数据结构的实现
  5. 修改 cmd 字体为 Consolas
  6. openfire php注册,openfire php 初始配置
  7. openNLP--Sentence Detector
  8. [No000057]一个人默默背单词,小心被传染哦
  9. 手机怎么用外嵌字幕_影视剪辑10大添加字幕软件,一键“复制粘贴”,网友:太简单了...
  10. 记一次跳过系统版本检测强刷opengapps卡刷包的过程,20210110修
  11. 向日葵远程控制软件——使用方法(含MacOS)
  12. rabbitMq实现公平分发策略
  13. Element表格固定第一列和第一行,并通过属性名动态渲染数据
  14. 主流手机CPU及机型介绍!手机CPU生产厂商介绍!高通QSD8250、MSM8255、TI OMAP 3630、nVIDIA Tegra 2介绍
  15. S5P4418 使用SD卡启动Android系统
  16. Echarts柱状图,实现不同系列,柱体之间的部分重叠效果
  17. 软件随想录:程序员部落酋长Joel谈软件(阮一峰译)-1
  18. 统计学---总体与样本
  19. 1.2字符类型及操作
  20. 极简烟雨图床正式版源码V2.1.3/高速外链图床

热门文章

  1. linux进程优雅退出,Go 的信号处理和优雅退出
  2. 腰间盘突出的自我治疗和锻炼方法
  3. C++中缀转后缀代码
  4. 智过网:一级建造师证书可以同时注册的证书!
  5. delphi 自定义popupmenu_Delphi PopupMenu
  6. 储存卡数据怎么恢复?很实用的方法!
  7. 清华大学uCore-操作系统内核实现
  8. 【Spring Boot 源码研究 】- 自动化装配机制核心注解剖析
  9. 查找算法3——分块查找
  10. 腾讯首款自研MMOG--QQ幻想网络同步算法揭秘