Mysql 列转行group_concat函数,与行转列(原创)

1、正常情况。

SELECT JoinEventIds from nt_mainnum

2、使用group_concat函数

select group_concat(JoinEventIds) from nt_mainnum

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
    ) JoinEventIds
FROM
    sequence
CROSS JOIN nt_mainnum
WHERE
    seq BETWEEN 1
AND (
    SELECT
        1 + LENGTH(JoinEventIds) - LENGTH(
            REPLACE (JoinEventIds, ‘,‘, ‘‘)
        )
)

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

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

结果均为:

时间: 2024-10-09 18:31:54

Mysql 列转行group_concat函数,与行转列(原创)的相关文章

Mysql 列转行统计查询 、行转列统计查询

之前看过一篇博文写得非常好,看后就很容易让人理解,博文地址为:http://www.cnblogs.com/lhj588/p/3315876.html 最近在群里又碰到一个朋友说起,于是记录一下: 假设表名为t.表里有六个字段p1,p2,p3,s1,s2,s3 现在想得到 p1=100 时s1值的总和 p2=100 时s2值的总和 p3=100 时s3值的总和 创建表: CREATE TABLE `t` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `s

Mysql中关于 group_concat函数详解

group_concat()主要功能:能将相同的行组合起来 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 Sql代码   select * from aa; +------+------+| id| name |+------+------+|1 | 10||1 | 20||1 | 20||2 | 20||3 | 200 ||3 | 500 |+------+---

SQLServer 中实现类似MySQL中的group_concat函数的功能

SQLServer中没有MySQL中的group_concat函数,可以把分组的数据连接在一起. 后在网上查找,找到了可以实现此功能的方法,特此记录下. SELECT a, stuff((SELECT ',' + b FROM #tb WHERE a = t.a FOR xml path('')), 1, 1, '' )AS b from  # tb AS t GROUP BY a; 先对a列进行分组,对分组中的b以Xml形式输出,再使用stuff将开关多出的,删掉. 具体实现参考:http:/

用decode函数实现行变列

用decode函数实现行变列----创建测试表create table student_score(name varchar2(20),subject varchar2(20),score number(4,1));-----插入测试数据insert into student_score (name,subject,score)values('张三','语文',78);insert into student_score (name,subject,score)values('张三','数学',8

mysql中的group_concat函数的用法

1 本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . 2 MySQL中group_concat函数 3 完整的语法如下: 4 group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 5 基本查询 6 mysql> select * from aa; 7 +------+------+ 8 | id| name | 9 +-

MySQL中使用group_concat()函数数据被截取(有默认长度限制),谨慎!

最近在工作中遇到一个问题: 我们系统的一些逻辑处理是用存储过程实现的,但是有一天客服反馈说订单下单失败,查了下单牵扯到的产品基础资源,没有问题. 下单的存储过程中有这样两句代码: 1 declare _err int default 0; 2 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND set _err=1; 3 DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' set _

MySQL中使用group_concat()函数数据字符过长报错的问题解决方法

最近在办公软件项目,在开发权限指标遇到一个问题:我们系统的一些逻辑处理是用存储过程实现的,但是有一天客户反馈说权限指标分配报错,查了分配的权限数据牵扯到的数据权限基础资源,没有问题.权限指标分配的存储过程中有这样两句代码: SET @tests = '';SELECTGROUP_CONCAT( DISTINCT REPLACE ( concat( '''', ( indicator_content ), '''' ), ',', ''',''' ))AS Allnumber INTO @test

MySQL在使用group_concat()函数数据被截取

遇到问题: 项目中有个需求,MySQL中存储的是树状的数据.现在给出一个节点,需要从Mysql数据库中取出这个节点下所有的节点.采用MySQL的函数. 函数如下: CREATE DEFINER=`root`@`%` FUNCTION `getMemberChildList`(rootId BIGINT) RETURNS mediumtext CHARSET utf8 BEGIN DECLARE str VARCHAR(60000) ; DECLARE cid VARCHAR(60000) ; S

mysql中的group_concat()函数的参数排序

1.用法:mysql group_concat()函数的参数是可以直接使用order by排序的. 2.例子表中数据如下: id  username  score 1    张三    90 2    李四    85 3    王五    80 4    张三    70 5    李四    80 6    张三    60   需求如下: 我们要查看每个人的片[多个]分数,将该人对应的[多个分数显示在一起],分数要[从高到底]排序 关键字分析可知: [多个分数显示在一起]: 必然用到组合[