Mysqlgroup_concat函数列转行,与行转列
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Mysqlgroup_concat函数列转⾏,与⾏转列
例⼀:
SELECT num from user
select group_concat(num) from user
⽅法⼀:建配置表(⽹上查询的⽅法):
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(num, ',', seq),
',' ,-1
) num
FROM
sequence
CROSS JOIN user
WHERE
seq BETWEEN1
AND (
SELECT
1+ LENGTH(num) - LENGTH(
REPLACE (num, ',', '')
)
)
⽅法⼆:将sequence替换为SELECT @rownum:=@rownum+1 AS seq FROM (SELECT @rownum:=0) r, user LIMIT 0,100) ,其中user为表名,这张表需要⼤于100条。
(⾃⼰不想建表,图省事)
SELECT SUBSTRING_INDEX(
SUBSTRING_INDEX(num, ',', seq),
',' ,-1
) num
FROM
(SELECT@rownum:=@rownum+1AS seq FROM (SELECT@rownum:=0) r, user LIMIT 0,100) b
CROSS JOIN user
WHERE
seq BETWEEN1
AND (
SELECT
1+ LENGTH(num) - LENGTH(REPLACE(num, ',', '')))
两种⽅法结果均为:
例⼆:
将这样的数据拆分出来,变成如下:
还是使⽤上述sql,只需添加⼀列即可。
(标记红⾊为新添加)
SELECT ID,SUBSTRING_INDEX(
SUBSTRING_INDEX(num, ',', seq),
',' ,-1
) num
FROM
(SELECT@rownum:=@rownum+1AS seq FROM (SELECT@rownum:=0) r, user LIMIT 0,100) b CROSS JOIN user
WHERE
seq BETWEEN1
AND (
SELECT
1+ LENGTH(num) - LENGTH(REPLACE(num, ',', '')))
4、补充
1) 本篇⽂章中,user为表名,num为字段,⾃⾏替换就好。
相关⽂章:。