用过Mysql的都知道她有一个很好的实现行转列功能的函数group_concat函数,非常方便

点击(此处)折叠或打开

  1. SELECT
  2. *
  3. FROM
  4. group_test;
  5. SELECT
  6. id,
  7. GROUP_CONCAT(sub_id)
  8. FROM
  9. `group_test`
  10. GROUP BY
  11. id;

现在的需求是有上面图二类似的结果集,需要把列二拆分 转换成行记录


我们知道如果是单条记录通过SUBSTRING_INDEX容易实现

点击(此处)折叠或打开

  1. select id,SUBSTRING_INDEX(sub_id,',',1) from group_test where id=3
  2. UNION
  3. select id,SUBSTRING_INDEX(SUBSTRING_INDEX(sub_id,',',2),',',-1) from group_test where id=3
  4. UNION
  5. select id,SUBSTRING_INDEX(SUBSTRING_INDEX(sub_id,',',3),',',-1) from group_test where id=3

但是如果是N条呢?同样也是可以使用SUBSTRING_INDEX来实现,只不过需要一个配置表,通过CROSS JOIN交叉连接实现,先看下CROSS JOIN

点击(此处)折叠或打开

  1. SELECT
  2. *
  3. FROM
  4. (SELECT 1 UNION SELECT 2) t1
  5. CROSS JOIN (SELECT 3 UNION SELECT 4) t2


下面就通过CROSS JOIN和SUBSTRING_INDEX实现我们的需求,首先构建一个配置表

点击(此处)折叠或打开

  1. CREATE TABLE digits (digit INT(1));
  2. INSERT INTO digits
  3. VALUES
  4. (0),
  5. (1),
  6. (2),
  7. (3),
  8. (4),
  9. (5),
  10. (6),
  11. (7),
  12. (8),
  13. (9);
  14. CREATE TABLE sequence (seq INT(3));
  15. INSERT INTO sequence (
  16. SELECT
  17. D1.digit + D2.digit * 10
  18. FROM
  19. digits D1
  20. CROSS JOIN digits D2
  21. );

然后

点击(此处)折叠或打开

  1. SELECT
  2. id,
  3. SUBSTRING_INDEX(
  4. SUBSTRING_INDEX(sub_id, ',', seq),
  5. ',' ,- 1
  6. ) sub_id,
  7. seq
  8. FROM
  9. sequence
  10. CROSS JOIN group_test
  11. WHERE
  12. seq BETWEEN 1
  13. AND (
  14. SELECT
  15. 1 + LENGTH(sub_id) - LENGTH(REPLACE(sub_id, ',', ''))
  16. )
  17. ORDER BY
  18. id,
  19. sub_id;

原贴: http://blog.chinaunix.net/uid-411974-id-3990697.html

( 转 ) Mysql group_concat 的反向应用实现(Mysql列转行)的更多相关文章

  1. mysql语法之case when then与列转行

    mysql语法中case when then与列转行的使用场景非常丰富. case语句类似java中条件分支语句的作用,可以类比java中的switch语句或者if语句来学习. 其语法如下: case ...

  2. 关于mysql group_concat 不能显示为空的列的其他信息

    今天做项目遇到一个问题,百度好久都没找到问题所在 是酱紫的,一张表 关联的表 然后我用sql语句查询 point.pid,point.pname,GROUP_CONCAT(downsite.pname ...

  3. JS 小工具 MYSQL WHERE IN条件 去掉换行符(列转行)

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  4. 教您如何使用MySQL group_concat函数

    MySQL group_concat函数是典型的字符串连接函数,下面就为您介绍MySQL group_concat的语法,希望对您学习MySQL group_concat函数有所帮助. MySQL g ...

  5. percona教程:MySQL GROUP_CONCAT的使用

    percona有一篇blog: The power of MySQL GROUP_CONCAT 比较详细地介绍了GROUP_CONCAT函数的用法.简单地翻译了一下. 假设你有4名工程师,这周他们为6 ...

  6. Mysql group_concat函数被截断的问题

    mysql group_concat函数被截断的问题   MySQL的 group_concat 函数默认返回1024个字节长度,超过长度的会被截断.最近程序中就遇到这个问题了. 通过如下命令可以查看 ...

  7. Mysql 列转行group_concat函数,与行转列

    1.正常情况. SELECT JoinEventIds from nt_mainnum 2.使用group_concat函数 select group_concat(JoinEventIds) fro ...

  8. Mysql异常问题排查与处理——mysql的DNS反向解析和客户端网卡重启

    中午刚想趴一会,不料锅从天降!!!Mysql连不上了....... 现象如下: 现象1:登录mysql所在服务器,连接MySQL 成功: 现象2:通过客户端远程连接MySQL,返回失败,如下: Ent ...

  9. Mysql group_concat函数列转行,与行转列

    例一: SELECT num from user 1.使用group_concat函数得到列转行 select group_concat(num) from user 2.使用SUBSTRING_IN ...

随机推荐

  1. 【NOIP模拟赛】公主的朋友 区间染色问题

    这道题大家都用的分块,然而我发现这是一个经典算法:区间染色问题. 我们区间染色时把区间分成若干连续的颜色段,然后我们每次染色删除原来的颜色段插入新的颜色段. 我们发现我们的时间复杂度直接与我们要染色区 ...

  2. [COGS 622] [NOIP2011] 玛雅游戏 模拟

    整个模拟的关键除了打出来就是一个剪枝:对于两个左右相邻的块你不用再走←,因为走→是等效的 #include<cstdio> #include<cstring> #include ...

  3. Java的外部类为什么不能使用private、protected进行修饰

    对于顶级类(外部类)来说,只有两种修饰符:public和默认(default).因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置.因此,只需要两种控制权限:包控制权限和公开访问权限, ...

  4. Codeforces Round #525 (Div. 2)A. Ehab and another construction problem

    A. Ehab and another construction problem 题目链接:https://codeforc.es/contest/1088/problem/A 题意: 给出一个x,找 ...

  5. Codeforces Round #524 (Div. 2) D. Olya and magical square

    D. Olya and magical square 题目链接:https://codeforces.com/contest/1080/problem/D 题意: 给出一个边长为2n的正方形,每次可以 ...

  6. deploy a ec2 and join into domain with terraform

    Below is the example to convert the ps script into userdata for terraform to create instance and aut ...

  7. Python基础(9)三元表达式、列表解析、生成器表达式

    一.三元表达式 三元运算,是对简单的条件语句的缩写.   # if条件语句 if x > f: print(x) else: print(y) # 条件成立左边,不成立右边 x if x > ...

  8. openlayers3中应用proj4js

    要在openlayers3中应用proj4js,需要在html中引用proj4js,然后在引用所需要的projection的js定义,如 http://epsg.io/21781-1753.js 然后 ...

  9. JHDU 2601 An easy problem (数学 )

    title: An easy problem 数学 杭电2601 tags: [数学] 题目链接 Problem Description When Teddy was a child , he was ...

  10. [bzoj3994][SDOI2015]约数个数和-数论

    Brief Description 计算\(\sum_{i\leqslant n}\sum_{j\leqslant m}\sigma_0(ij)\). Algorithm Design 首先证明一个结 ...