zoukankan      html  css  js  c++  java
  • 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:=@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, ',', ''))) 
    复制代码

    两种方法结果均为:

  • 相关阅读:
    iOS testFlight的使用
    Java读书笔记
    Vim编辑器
    seleniumRC测试用例——登录
    自动化测试工具——selenium
    《Oracle从入门到精通》
    WEB服务器相关知识摘录
    oracle表空间与分区表
    Linux 常用命令
    Linux 常见问题
  • 原文地址:https://www.cnblogs.com/cxxjohnson/p/6725932.html
Copyright © 2011-2022 走看看