精华内容
下载资源
问答
  • MySQL行转列

    2017-09-18 16:37:00
    MySQL行转列

    MySQL行转列

    一、新建成绩测试表:

    CREATE TABLE `score` (
      `student_no` varchar(13) DEFAULT NULL COMMENT '学号',
      `subject_no` varchar(20) DEFAULT NULL COMMENT '科目',
      `score` int(3) DEFAULT NULL COMMENT '成绩'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    

    二、创建存储过程批量插入测试数据:

    delimiter //
    CREATE PROCEDURE pro_insert()
    BEGIN
        DECLARE num int;
        SET num =1;
    WHILE num <10000 DO
        INSERT INTO score (student_no,subject_no,score) VALUES
        (CONCAT('00',num),'语文',FLOOR(70+RAND()*30)),
        (CONCAT('00',num),'数学',FLOOR(70+RAND()*30)),
      (CONCAT('00',num),'英语',FLOOR(70+RAND()*30));
      SET num=num+1;
    END WHILE;
    end;
    //

    三、查询执行结果:
    这里写图片描述

    四、利用case when then end 将数据行转列

    SELECT 
        student_no,
        MAX(CASE subject_no WHEN '语文' THEN score else 0 END) AS 语文,
        MAX(CASE subject_no WHEN '数学' THEN score else 0 END) AS 数学,
        MAX(CASE subject_no WHEN '英语' THEN score else 0 END) AS 英语
    FROM score
    GROUP BY student_no;

    转换后结果:

    这里写图片描述

    展开全文
  • mysql 行转列

    2016-08-25 14:28:48
    mysql 行转列
    SET @SQL = NULL;


    SELECT
    GROUP_CONCAT(
    DISTINCT CONCAT(
    'MAX(IF(a.code = ''',
    CODE,
    ''',a.rejectQuantity, 0)) AS ''',
    CONCAT(mm, '/', dd),
    ''''
    )
    ) INTO @SQL
    FROM
    reject;




    SET @SQL = CONCAT(
    'Select b.*,',
    @SQL,
    ' From reject a
    right join bom b
    on a.code = b.code
                Group by dd'
    );


    PREPARE stmt
    FROM
    @SQL;


    EXECUTE stmt;


    DEALLOCATE PREPARE stmt;
    展开全文
  • mysql行转列

    2020-11-27 13:57:29
    mysql行转列 mysql三大范式 第一范式 :每个列具有原子性,不可再分(现代关系型数据库都符合);第二范式:每个列都和主键相关(每个表描述同一个事物);第三范式 :每个列都和主键直接相关,不存在传递依赖;...

    mysql行转列

    mysql三大范式

    第一范式每个列具有原子性,不可再分(现代关系型数据库都符合);第二范式:每个列都和主键相关(每个表描述同一个事物);第三范式 :每个列都和主键直接相关,不存在传递依赖;开发过程中表的设计一般符合第三范式,范式越高、表就越多、结构越复杂、性能越差。

    能出现行转列的原因,大多数是由于历史原因或者性能原因,都使用了违反第一范式的设计模式。即每个列具有原子性,不可再分(具体结构见下表)。 这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果。

    实现

    SELECT  SUBSTRING_INDEX(SUBSTRING_INDEX(a.site_codes,',',b.help_topic_id+1),',',-1) site_codes FROM tb_route a
     JOIN mysql.help_topic b ON b.help_topic_id < (LENGTH(a.site_codes) - LENGTH(REPLACE(a.site_codes,',',''))+1)

    如果末尾有逗号可参考 https://www.cnblogs.com/Yongzhouunknown/p/4844267.html

    展开全文
  • MySQL 行转列

    2019-11-07 22:04:46
    mysql 行转列 CREATE table a( id INT, sname char, class INT, sourse INT, course CHAR ) 插入数据 SELECT * from a 把学科这一列从列转成行 SELECT * , MAX(IF(course='语',sourse,0)) '语', MAX(IF(course='...

    mysql 行转列

    CREATE table a(
    id INT,
    sname char,
    class INT,
    sourse INT,
    course CHAR
    )
    

    插入数据

    SELECT * from a
    

    在这里插入图片描述
    把学科这一列从列转成行

    SELECT * ,
    MAX(IF(course='语',sourse,0)) '语',
    MAX(IF(course='数',sourse,0)) '数',
    MAX(IF(course='英',sourse,0)) '英',
    MAX(IF(course='物',sourse,0)) '物',
    MAX(IF(course='化',sourse,0)) '化'
    from a GROUP BY id   
    

    在这里插入图片描述
    行转列也可以用 PIVOT 和 UNPIVOT
    这里就不多说

    展开全文
  • Mysql 行转列

    2018-04-24 19:20:28
    Mysql 行转列/* Navicat MySQL Data TransferSource Server : 160 Source Server Version : 50629 Source Host : 192.168.1.160:3306 Source Database : data_reportTarget Server Type
  • mysql行转列、列转行语句不难,不做多余解释了,看语句时,从内往外一句一句剖析行转列有如图所示的表,现在希望查询的结果将行转成列建表语句如下:create table `test_tb_grade` (`id` int(10) not null auto_...
  • 如何实现mysql行转列发布时间:2020-06-03 17:28:56来源:51CTO阅读:217作者:三月下面一起来了解下如何实现mysql行转列,相信大家看完肯定会受益匪浅,文字在精不在多,希望如何实现mysql行转列这篇短内容是你想要...
  • mysql行转列、列转行语句不难,不做多余解释了,看语句时,从内往外一句一句剖析行转列有如图所示的表,现在希望查询的结果将行转成列建表语句如下:CREATE TABLE `TEST_TB_GRADE` (`ID` int(10) NOT NULL AUTO_...

空空如也

空空如也

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

mysql行转列

mysql 订阅