mysql行转列和列传行

1,行转列,字符串拆分

 -- 1.1 准备
 CREATE TABLE T1(dt DATETIME,dv VARCHAR(100))
INSERT INTO T1 (dt,dv) VALUES('2017-01-01 00:00:00','1,2,3,4,5,6'),('2017-01-01 00:01:00','10,20,30,40,50');

 -- 序列表
 CREATE TABLE sequence (id INT);
 -- 序列表填充存储过程
 DELIMITER $$

CREATE PROCEDURE `P`()
    BEGIN
	DECLARE i INT DEFAULT 0;
	WHILE i<60 DO
		INSERT INTO sequence(id) VALUES(i);
		SET i =i+1;
	END WHILE;	
    END$$
DELIMITER ;

 -- 调用存储过程
  CALL P();

 -- 1.2,查询
SELECT
	DATE_ADD(dt,INTERVAL a.id-1 SECOND) dt,
	
		SUBSTRING_INDEX(SUBSTRING_INDEX(dv,',',a.id), ',', -1)	AS dv
FROM
	sequence a
CROSS JOIN(
	SELECT
		dt,
		CONCAT(dv, ',')AS dv,
		LENGTH(dv)- LENGTH(REPLACE(dv, ',', ''))+ 1 AS size
	FROM
		`T1`  
)b ON a.id <= b.size
ORDER BY dt
-- 结果
dt                   dv      
-------------------  --------
2017-01-01 00:00:00  1       
2017-01-01 00:00:01  2       
2017-01-01 00:00:02  3       
2017-01-01 00:00:03  4       
2017-01-01 00:00:04  5       
2017-01-01 00:00:05  6       
2017-01-01 00:01:00  10      
2017-01-01 00:01:01  20      
2017-01-01 00:01:02  30      
2017-01-01 00:01:03  40      
2017-01-01 00:01:04  50  
2,列传行,字符串拼接
CREATE TABLE T2(id INT,NAME VARCHAR(10));

INSERT INTO T2(id,NAME) VALUES(1,'a'),(1,'b'),(2,'aa'),(2,'cc');

SELECT id,GROUP_CONCAT(NAME) r
FROM T2
GROUP BY id;

-- 结果
    id  r       
------  --------
     1  a,b     
     2  aa,cc   
     
 -- 注意区别于
SELECT id,GROUP_CONCAT(NAME,":") r
FROM T2
GROUP BY id;

    id  r        
------  ---------
     1  a:,b:    
     2  aa:,cc:  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝闻道-夕死可矣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值