精华内容
下载资源
问答
  • 2021-08-27 20:46:23
    SELECT
    	GROUP_CONCAT( NAME ) 
    FROM
    	t_tag
    

    GROUP_CONCAT 以逗号进行分割

    更多相关内容
  • 列转行:利用max(case when then) max—聚合函数 取最大值 (case course when ‘语文’ then score else 0 end) —判断 as 语文—别名作为列名 SELECT `name`, MAX( CASE WHEN course='\u8bed\u6587' THEN ...
  • 下面小编就为大家带来一篇mysql 列转行的技巧(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 如下所示: SELECT count(DISTINCT(a.rect_id)) zcount, a.job_dept,  DATE_FORMAT(submit_date, '%Y-%m') zsubmit_date  FROM  表名 a  WHERE  a.statu = 3  AND a.rstatu = 2  AND a.job_dept IN ('19', '...
  • mysql 列转行

    2021-10-27 16:00:59
    mysql 列转行 select * from tablename 得出数据为 字段为attr1,attr2,attr3等,现在想把列转行,要这种结果: sql语句: 可以使用information_schema.COLUMNS 来查询出表的字段名字。这样 select COLUMN_NAME ...

    mysql 列转行

    select * from tablename
    

    得出数据为
    在这里插入图片描述

    字段为attr1,attr2,attr3等,现在想把列转行,要这种结果:

    在这里插入图片描述
    sql语句:
    可以使用information_schema.COLUMNS 来查询出表的字段名字。这样

    select COLUMN_NAME  clouname,
           (
               case col.COLUMN_NAME
                   when 'attr1' then zu.attr1
                   when 'attr2' then zu.attr2
                   when 'attr3' then zu.attr3
                   when 'attr4' then zu.attr4
                   when 'attr5' then zu.attr5
                   when 'attr6' then zu.attr6
                   end) 'value'
    from information_schema.COLUMNS col,
         zujianduibitest1 zu
    where col.TABLE_NAME = 'table_name'
      and zu.attr1 = '条件的值';
    
    展开全文
  • MySQL列转行

    2022-06-17 08:35:40
    mysql列转行

    以下内容包括:行转列、SQL、执行效果展示、列转行、SQL、执行效果展示、总结、附上的建表语句

    一、行转列


    废话不多说,先上SQL(两种方式):

    – 行转列:方法①
    SELECT
    id,
    name,
    GROUP_CONCAT(CASE WHEN subject = ‘语文’ THEN score END SEPARATOR ‘’) ‘语文’,
    GROUP_CONCAT(CASE WHEN subject = ‘数学’ THEN score END SEPARATOR ‘’) ‘数学’,
    GROUP_CONCAT(CASE WHEN subject = ‘英语’ THEN score END SEPARATOR ‘’) ‘英语’
    FROM test1
    GROUP BY name;
    – 行转列:方法②
    SELECT
    id,
    name,
    SUM(IF(subject = ‘语文’,score,0)) AS ‘语文’,
    SUM(IF(subject = ‘数学’,score,0)) AS ‘数学’,
    SUM(IF(subject = ‘英语’,score,0)) AS ‘英语’
    FROM test1
    GROUP BY name;

    效果如下:
    在这里插入图片描述
    这里方法②也可以使用GROUP_CONCAT的方式,两种方法的效果一样。**

    二、列转行

    在这里插入图片描述
    废话不多说,先上SQL:

    – 列转行
    SELECT name,‘语文’ AS subject,语文 AS score FROM test2
    UNION ALL
    SELECT name,‘数学’ AS subject,数学 AS score FROM test2
    UNION ALL
    SELECT name,‘英语’ AS subject,英语 AS score FROM test2
    ORDER BY name ASC,subject DESC;

    效果如下:
    在这里插入图片描述

    总结:

    行转列主要借助:CASE WHEN或IF,这两种都是判断条件,思路>当满足某个学科的时候我们把它当做新的一列。

    列转行主要借助:UNION或UNION ALL,这两个都是把结果集合并起来,思路> 每次查询学生名称(基本列)和学科的其中一列的值,再把它们组合起来,这样你的结果集就是只有学生名称和科目成绩两列了。(我这里多加了一列科目)

    附上建表语句:

    CREATE TABLE test1 (
    id int(11) NOT NULL AUTO_INCREMENT,
    name varchar(30) DEFAULT NULL COMMENT ‘学生名称’,
    subject varchar(30) DEFAULT NULL COMMENT ‘科目名称’,
    score decimal(5,1) DEFAULT NULL COMMENT ‘分数’,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

    CREATE TABLE test2 (
    id int(11) NOT NULL AUTO_INCREMENT,
    name varchar(30) DEFAULT NULL COMMENT ‘学生名称’,
    语文 decimal(5,1) DEFAULT NULL COMMENT ‘语文科目分数’,
    数学 decimal(5,1) DEFAULT NULL COMMENT ‘数学科目分数’,
    英语 decimal(5,1) DEFAULT NULL COMMENT ‘英语科目分数’,
    PRIMARY KEY (id)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

    文章转自:https://blog.csdn.net/liuquanfeng92/article/details/107763994

    展开全文
  • mysql列转行的技巧(分享)

    千次阅读 2021-01-20 00:33:47
    这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果。表数据:IDValue1tiny,small,big2small,medium3tiny,big期望得到结果:IDValue1tiny1small1big2small2medium3tiny3big正文...

    前言:

    由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式。即同一个列中存储了多个属性值(具体结构见下表)。

    这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果。

    表数据:

    ID

    Value

    1

    tiny,small,big

    2

    small,medium

    3

    tiny,big

    期望得到结果:

    ID

    Value

    1

    tiny

    1

    small

    1

    big

    2

    small

    2

    medium

    3

    tiny

    3

    big

    正文:

    #需要处理的表

    create table tbl_name (ID int ,mSize varchar(100));

    insert into tbl_name values (1,'tiny,small,big');

    insert into tbl_name values (2,'small,medium');

    insert into tbl_name values (3,'tiny,big');

    #用于循环的自增表

    create table incre_table (AutoIncreID int);

    insert into incre_table values (1);

    insert into incre_table values (2);

    insert into incre_table values (3);

    select a.ID,substring_index(substring_index(a.mSize,',',b.AutoIncreID),',',-1)

    from

    tbl_name a

    join

    incre_table b

    on b.AutoIncreID <= (length(a.mSize) - length(replace(a.mSize,',',''))+1)

    order by a.ID;

    原理分析:

    这个join最基本原理是笛卡尔积。通过这个方式来实现循环。

    以下是具体问题分析:

    length(a.Size) - length(replace(a.mSize,',',''))+1  表示了,按照逗号分割后,改列拥有的数值数量,下面简称n

    join过程的伪代码:

    根据ID进行循环

    {

    判断:i 是否 <= n

    {

    获取最靠近第 i 个逗号之前的数据, 即 substring_index(substring_index(a.mSize,',',b.ID),',',-1)

    i = i +1

    }

    ID = ID +1

    }

    总结:

    这种方法的缺点在于,我们需要一个拥有连续数列的独立表(这里是incre_table)。并且连续数列的最大值一定要大于符合分割的值的个数。

    例如有一行的mSize 有100个逗号分割的值,那么我们的incre_table 就需要有至少100个连续行。

    当然,mysql内部也有现成的连续数列表可用。如mysql.help_topic: help_topic_id 共有504个数值,一般能满足于大部分需求了。

    改写后如下:

    select a.ID,substring_index(substring_index(a.mSize,',',b.help_topic_id+1),',',-1)

    from

    tbl_name a

    join

    mysql.help_topic b

    on b.help_topic_id < (length(a.mSize) - length(replace(a.mSize,',',''))+1)

    order by a.ID;

    以上这篇mysql 列转行的技巧(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:mysql 行转列和列转行实例详解

    mysql 列转行,合并字段的方法(必看)

    mssql 数据库表行转列,列转行终极方案

    SQL行转列和列转行代码详解

    SQL行转列、列转行的简单实现

    mysql列转行以及年月分组实例

    SQL知识点之列转行Unpivot函数

    展开全文
  • MySQL列转行(group_concat函数)

    千次阅读 2021-12-16 22:33:46
    MySQL中,如何将转成一行?比如一个一个商品会属于多个分类(如华为手机可以是手机分类,也可以是数码分类),如何将此商品在一条数据中展现所有分类。 思路很简单,通过MySQL函数group_concat即可解决。 创建测试...
  • bitsCN.commysql列转行以及年月分组Java代码SELECT count(DISTINCT(a.rect_id)) zcount, a.job_dept, DATE_FORMAT(submit_date, '%Y-%m') zsubmit_date FROM 表名 a WHERE a.statu = 3 AND...
  • concat函数列转行,与行转列例一: SELECT num from user 1.使用group_concat函数得到列转行 select group_concat(num) from user 2.使用SUBSTRING_IN ...【转】MySQL存储过程中使用动态行转列MySQL存储过程中使用...
  • MySQL 列转行用法实现

    2019-09-30 22:48:57
    需求 需要将如下所示原始表数据转为结构化的数据按行显示: 转为结构化数据: ...如果是单条记录通过SUBSTRING_INDEX容易实现,SQL语句如下: ...Mysql group_concat的反向应用实现(Mysql列转行
  • tag40 | +------------+-------+-------+-------+-------+-------+ 我的思路: 1、把行的转换成: +------------+-------+-------+-------+----| | a | b1 | +------------+-------+-------+-------+----| | 2011-...
  • mysql列转行(行用字符串连接) 原来的数据 转换后的 SELECT user_Id,GROUP_CONCAT(POST_CODE)AS POST_CODE FROM rh_persion_post GROUP BY user_Id SELECT user_Id,GROUP_CONCAT(POST_CODE)AS POST_CODE FROM rh...
  • file,@fild, t2.num_rn + 1), @fild, -1) as result --列转行 FROM(SELECT 1 asid ,'[{"val":4,"area":"floor","setVal":null,"isExceed":false,"isQualified":true},{"val":11,"area":"floor","setVal":null,...
  • Mysql 行转列,列转行 SQL语句和示例表结构SQL Mysql 行转列,列转行 SQL语句和示例表结构SQL
  • 此时可以看到【mobile】的数据后面都添加了一个逗号, 【size】是【mobile】原数据总长度,减去去掉逗号的原数据,加1的长度。 【REPLACE(mobile,’,’,’’)】是【mobile】原数据把逗号替换为空的数据。 ...
  • MYSQL列转行

    2021-05-07 16:12:35
    SELECT YEAR , MAX( IF ( c.MONTH = '1', c.count, 0 )) AS 'm1', MAX( IF ( c.MONTH = '2', c.count, 0 )) AS 'm2', MAX( IF ( c.MONTH = '3', c.count, 0 )) AS 'm3', ... ( c.MONTH = '4', c.count, 0 )) ...
  • KEY `form_group_id` (`form_group_id`) ) 1、初始效果 2、行转效果 3、最终合并效果 sql实现 select #合并 GROUP_CONCAT(changeContext SEPARATOR '') changeContext, GROUP_CONCAT(changeBefore SEPARATOR...
  • mysql 列转行列转行的问题今天在逛大java吧的时候看到一个行转列、列转行的问题,看了之后还真的不知道怎么下手,可能平时用hibernate作为持久层用多了,sql语句也不会写了,赶紧去找度娘聊聊天,然后建了个表做个...
  • 查询数据 select * from user2 思路 把arms的数据单独查询出来,并自己添加一equipment,使其数据全部等于’arms‘。 select user_name,'arms' as equipment,arms from user2 把clothing的数据单独查询出来,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,082
精华内容 1,632
关键字:

mssql列转行