博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql group_concat函数列转行,与行转列
阅读量:6702 次
发布时间:2019-06-25

本文共 1358 字,大约阅读时间需要 4 分钟。

1、正常情况。

SELECT JoinEventIds from user

2、使用group_concat函数得到列转行。

select group_concat(JoinEventIds) from user

3、使用SUBSTRING_INDEX和CROSS JOIN将列里面的的数字都拆分出来,把一行变成一列。

方法一(网上查询的方法):

建配置表:

CREATE TABLE digits (digit INT(1));    INSERT INTO digits    VALUES        (0),        (1),        (2),        (3),        (4),        (5),        (6),        (7),        (8),        (9);    CREATE TABLE sequence (seq INT(3));    INSERT INTO sequence (        SELECT            D1.digit + D2.digit * 10        FROM            digits D1        CROSS JOIN digits D2    );

配置表sequence的结果为0-99的一列数字:

SQL:

SELECT    SUBSTRING_INDEX(        SUBSTRING_INDEX(JoinEventIds, ',', seq),        ',' ,- 1    ) JoinEventIdsFROM    sequenceCROSS JOIN userWHERE    seq BETWEEN 1AND (    SELECT        1 + LENGTH(JoinEventIds) - LENGTH(            REPLACE (JoinEventIds, ',', '')        ))

方法二(自己不想建表,图省事):将sequence替换为SELECT @rownum:=@rownum+1 AS seq FROM (SELECT @rownum:=0) r, user  LIMIT 0,100) ,user为表名,这张表需要大于100条。

SELECT  SUBSTRING_INDEX(            SUBSTRING_INDEX(JoinEventIds, ',', seq),            ',' ,- 1        ) JoinEventIds    FROM        (SELECT @rownum:=@rownum+1 AS seq FROM (SELECT @rownum:=0) r, user  LIMIT 0,100) b    CROSS JOIN user    WHERE        seq BETWEEN 1    AND (        SELECT            1 + LENGTH(JoinEventIds) - LENGTH(REPLACE(JoinEventIds, ',', '')))

两种方法结果均为:

转载地址:http://cagoo.baihongyu.com/

你可能感兴趣的文章
TCP三次握手及四次挥手详细图解(转)
查看>>
数据结构02-链表
查看>>
UWP学习记录
查看>>
Matrix Computations 1
查看>>
C#中几种数据库的大数据批量插入
查看>>
[flask]gunicorn配置文件
查看>>
牵丝戏
查看>>
OC-封装、继承、多态
查看>>
改需求
查看>>
linq中let关键字学习
查看>>
Java并发编程(多线程)中的相关概念
查看>>
6-14 数据库高级
查看>>
[QNAP crontab 定時執行程式
查看>>
listView当中有嵌套了有onClickListener的控件时ListView自身的onItemClick无响应的解决方案...
查看>>
本地浏览器缓存sessionStorage(临时存储) localStorage(长期存储)的使用
查看>>
python面试题目
查看>>
GIL , 线程池 , 同步 , 异步 , 队列 , 事件
查看>>
表单oninput和onchange事件区别
查看>>
[转]windows系统激活
查看>>
下划线按钮
查看>>