Mysql group_concat函数列转行,与行转列
例一:
SELECT num from user

1、使用group_concat函数得到列转行
select group_concat(num) from user

2、使用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(num, ',', seq),
',' ,- 1
) num
FROM
sequence
CROSS JOIN user
WHERE
seq BETWEEN 1
AND (
SELECT
1 + LENGTH(num) - LENGTH(
REPLACE (num, ',', '')
)
)
方法二:将sequence替换为SELECT @rownum:=@rownum+1 AS seq FROM (SELECT @rownum:=0) r, user LIMIT 0,100) ,其中user为表名,这张表需要大于100条。(自己不想建表,图省事)
SELECT SUBSTRING_INDEX(
SUBSTRING_INDEX(num, ',', seq),
',' ,- 1
) num
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(num) - LENGTH(REPLACE(num, ',', '')))
两种方法结果均为:

例二:

将这样的数据拆分出来,变成如下:

还是使用上述sql,只需添加一列即可。(标记红色为新添加)
SELECT ID,SUBSTRING_INDEX(
SUBSTRING_INDEX(num, ',', seq),
',' ,- 1
) num
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(num) - LENGTH(REPLACE(num, ',', '')))
4、补充
1) 本篇文章中,user为表名,num为字段,自行替换就好。
相关文章:Mysql语句优化
Mysql group_concat函数列转行,与行转列的更多相关文章
- SQL列转行,行转列实现
在工作中,大家可能会遇到一些SQL列转行.行转列的问题,恰好,我也遇到了,就在此记录一下.此处所用的是SQLServer2008R2. 行转列,列转行,都要预先知道要要处理多少数据,在此我就以三种方案 ...
- Spark基于自定义聚合函数实现【列转行、行转列】
一.分析 Spark提供了非常丰富的算子,可以实现大部分的逻辑处理,例如,要实现行转列,可以用hiveContext中支持的concat_ws(',', collect_set('字段'))实现.但是 ...
- hive中的列转行和行转列
1.列转行 1.1 相关函数的说明: concat(string1,string,...) //连接括号内字符串,数量不限. concat_ws(separator,string1,string2,. ...
- oracle 逗号分割,列转行,行转列
SQL代码 列转行 select REGEXP_SUBSTR(a.rolecode ,,l) rolecode from ( select 'a,aa,aaa' rolecode from dual ...
- SQL 列转行与行转列
假设有张学生成绩表(tb)如下:Name Subject Result张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物理 94*/ -------------- ...
- Mysql group_concat函数被截断的问题
mysql group_concat函数被截断的问题 MySQL的 group_concat 函数默认返回1024个字节长度,超过长度的会被截断.最近程序中就遇到这个问题了. 通过如下命令可以查看 ...
- sql内置函数pivot强大的行转列功能
原文:sql内置函数pivot强大的行转列功能 语法: PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVO ...
- 今天来学习一下MySQl的 临时表,变量,行转列,预处理的一些相关技术的使用!
先来简单了解一下MySQL数据库有意思的简介 MySQL这个名字,起源不是很明确.一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上, 而且不管怎样,MySQL AB创始 ...
- 教您如何使用MySQL group_concat函数
MySQL group_concat函数是典型的字符串连接函数,下面就为您介绍MySQL group_concat的语法,希望对您学习MySQL group_concat函数有所帮助. MySQL g ...
- mysql GROUP_CONCAT 函数 将相同的键的多个单元格合并到一个单元格
mysql GROUP_CONCAT 函数 将相同的键的多个单元格合并到一个单元格 MemberID MemberName FruitName -------------- ------------- ...
随机推荐
- DataGridView使用技巧七:列顺序的调整、操作行头列头的标题
一.列顺序的调整 设定DataGridView的AllowUserToOrderColumns为True的时候,用户可以自由调整列的顺序. 当用户改变列的顺序的时候,其本身的Index不好改变,但是D ...
- golang自定义返回error
在开发过程中, 标准库返回的error内容已经无法满足我们的需要时,发现builtin.go中error是一个interface, type error interface { Error() ...
- StarRTC , AndroidThings , 树莓派小车,公网环境,视频遥控(三)手机端
原文地址:http://blog.starrtc.com/?p=111 这篇来介绍一下整个项目的手机端部分.在上一篇里我们已经将sdk导入到项目中了,下边直接用即可. 1 登录StarRTC的服务跟小 ...
- 当数据库的字段为date类型时候
当数据库的字段为date类型时候: //--------------------------------------------------数据库设计------------------------- ...
- LVS学习笔记及总结(思维导图版)
转自: http://www.07net01.com/2015/10/944377.html 下图是我在跟随马哥的脚步学习LVS过程中的学习笔记,以此为蓝本总结的,若有不足之处请谅解!
- Photoshop脚本入门
- e669. 绘制缓冲图像
To draw on a buffered image, create a graphics context on the buffered image. // Create a graphics c ...
- socket client简单传输数据
1.整数转换为用于TCP传输的二进制 _host = "127.0.0.1" _port = 5678 _address = (_host, _port) s=socket.soc ...
- Stream(流)的基本操作
//把流转化为文件 public static void StreamToFile(Stream stream, string filepath) { byte[ ...
- 【Java面试题】24 sleep() 和 wait() 有什么区别? 详细解析!!!!
第一种解释: 功能差不多,都用来进行线程控制,他们最大本质的区别是:sleep()不释放同步锁,wait()释放同步缩. 还有用法的上的不同是:sleep(milliseconds)可 ...