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

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
    ) JoinEventIds
FROM
    sequence
CROSS JOIN user
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, user  LIMIT 0,100) ,user为表名,这张表需要大于100条。

SELECT  SUBSTRING_INDEX(
            SUBSTRING_INDEX(JoinEventIds, ‘,‘, seq),
            ‘,‘ ,- 1
        ) JoinEventIds
    FROM
        (SELECT @rownum:[email protected]+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, ‘,‘, ‘‘))) 

两种方法结果均为:

时间: 2024-12-20 10:50:30

Mysql group_concat函数列转行,与行转列的相关文章

列转行且行转列

原数据格式如下: 这是学生的成绩表,每科为一列,要求转换为下面的格式: 即,把把课程列转换为行,把学生行转换为列: 建表: create table #a(name varchar(20),english int,chinese int ,math int)insert into #a values( 'zhangsan',10,39,40)insert into #a values( 'lisi',16,25,36) 思路:先把列转换为行: select name,km,scorefrom(s

hive列转行、行转列

1.列转行 select  t.cust_id          ,concat_ws(',',collect_list(group_id)) one_pace  from (select   'A_001' cust_id                       ,'20191014' group_id           union all           select   'A_001' cust_id                      ,'20191015' group_

sql内置函数pivot强大的行转列功能

原文:sql内置函数pivot强大的行转列功能 语法: PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (-) )AS P 完整语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<column_list>) ) UNPIVOT用于将列明转为列值(即列转行),在SQL Server 200

mysql GROUP_CONCAT 函数 将相同的键的多个单元格合并到一个单元格

mysql GROUP_CONCAT 函数 将相同的键的多个单元格合并到一个单元格 MemberID MemberName FruitName -------------- --------------------- -------------- 1 Al Apple 1 Al Cherry Desired output MemberID MemberName FruitName ----------- -------------- ------------ 1 Al Apple, Cherry

一行多列变多行多列 &nbsp;

问题: aa bb cc dd ee ff gg hh ii jj kk ll mm nn oo pp拆分为:aa    bb    cc    dd ee    ff    gg     hh ii      jj    kk     ll mm  nn  oo     pp 解答: xargs -n4 awk -vRS=' ' 'ORS=NR%4?" ":"\n"' sed 's/ /\n/4;P;D' 一行多列变多行多列

MySQL 行转列 -》动态行转列 -》动态行转列带计算

Pivot Table Using MySQL - A Complete Guide | WebDevZoomhttp://webdevzoom.com/pivot-table-using-mysql/ Cross-Tabulation (Pivot Tables) with MySQL - CodeProjecthttps://www.codeproject.com/articles/363339/cross-tabulation-pivot-tables-with-mysql Pivot T

MYSQL group_concat() 函数

看来看一下表中的数据 select * from t; 下一步来看一下group_concat函数的用法 select ID,group_concat(Name) from t group by ID; 如果要消除重复项可以加distinct select ID,group_concat(distinct Name) from t group by ID; 如果还排序可以这样 select ID,group_concat(name order by name desc) from t group

mysql group_concat函数是有长度限制的

在表关联查询中,特别是一对多关系的表查询中,group_concat函数是很有用的一个函数,帮助我们减少对数据库查询的次数,减少服务器的压力. 但是今天使用group_concat函数查询数据库时,发现查询出来的结果,居然少了很多.进过很多步的测试后,并上网百度后,验证了自己的结论,group_concat的长度是有限制的,默认为1024个字符.也就是说字符查询出来的字符串如果超过了1024个字节,将会自动截断. 在不考虑使用其它思路情况下的解决办法: 将将group_concat的长度设计加大

hive udtf 输入一列返回多行多列

之前说到了hive udf,见https://blog.csdn.net/liu82327114/article/details/80670415 UDTF(User-Defined Table-Generating Functions) 用来解决 输入一行输出多行(On-to-many maping) 的需求. 继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF,实现initialize, process, close三个方法. UDTF首先