mysql 中的列转行问题

有些时候需要把mysql中以特定分割的多列,转换成相对应的每行,如 mysql中的help_topic 字段 description ,

description 中以‘逗号’分割的多个函数,如果每个函数单独一行,该怎么做的,mysql中没有提供专门的列转行的函数,之只有行转列的函数(group_contact)

我们举例说明下:

首先,通过


SELECT

LENGTH(t1.description) - LENGTH(

REPLACE (t1.description, ',', '')

) + 1 AS a

FROM

mysql.help_topic t1

ORDER BY

a DESC

查询出要分割列的最大值,然后构造一个映射表,这个映射表的行数要大于分割‘列’的最大值


我们下面构造一个映射表,并向里面插入大于最大‘分割列’的行数



use test;

DROP TABLE if EXISTS assit;

create table assit (id int );

--通过一个简单的存储过程插入200行,

drop PROCEDURE if EXISTS auto_increment_id;

delimiter //

create PROCEDURE auto_increment_id()

BEGIN

DECLARE i int;

set i=1;

WHILE i<=200 DO

insert INTO assit VALUES(i);

set i=i+1;

end WHILE;

end;

//

CALL auto_increment_id();



然后使用下面sql即可

USE mysql;

SELECT

t1.`name`,

t1.example,

t1.url,

SUBSTRING_INDEX(

substring_index(t1.description, ',', a1.id),

',' ,- 1

)

FROM

help_topic t1

JOIN test.assit a1 ON a1.id BETWEEN 1 --这里通过笛卡尔乘积构造一个循环,

AND (

LENGTH(t1.description) - LENGTH(

REPLACE (t1.description, ',', '')

) + 1

)

ORDER BY

NAME


shell 版的转换会更简单,见链接:https://wenda.zuncuang.com/question/47

  • 发表于 2016-06-29 17:19
  • 阅读 ( 489 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
石天
石天

437 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章