mysql-行转列、列转行

group_concat(),函数说明

    手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果;

    通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。

 

1、行转列

-- 不转sql语句  
SELECT t2.HIERARCHY_ID FROM t_hierarchy t2 WHERE t2.`DEPARTMENT_PID` = (SELECT t1.DEPARTMENT_ID FROM t_staff t1 WHERE t1.id = 3) AND t2.`TYPE`=1030 AND STATUS=1  
  
-- 将行转列以","隔开  
SELECT GROUP_CONCAT(t2.HIERARCHY_ID SEPARATOR ',') FROM t_hierarchy t2 WHERE t2.`DEPARTMENT_PID` = (SELECT t1.DEPARTMENT_ID FROM t_staff t1 WHERE t1.id = 3) AND t2.`TYPE`=1030 AND STATUS=1;  
  
-- 将行转列以","隔开,如果填上其他符号则是以","+符号隔开  
SELECT GROUP_CONCAT(t2.HIERARCHY_ID,'') FROM t_hierarchy t2 WHERE t2.`DEPARTMENT_PID` = (SELECT t1.DEPARTMENT_ID FROM t_staff t1 WHERE t1.id = 3) AND t2.`TYPE`=1030 AND STATUS=1;  
  
-- 将行转列以","隔开  
SELECT GROUP_CONCAT(t2.HIERARCHY_ID) FROM t_hierarchy t2 WHERE t2.`DEPARTMENT_PID` = (SELECT t1.DEPARTMENT_ID FROM t_staff t1 WHERE t1.id = 3) AND t2.`TYPE`=1030 AND STATUS=1;

 

 

(不转输出)



(行转列后输出)

 

2、行转列列传行更具体例子

   1、查看数据

SELECT  * FROM tabName ;

 

   

   2、列转行统计数据

SELECT DATE ,
	MAX(CASE NAME WHEN '小说' THEN Scount ELSE 0 END ) 小说,
	MAX(CASE NAME WHEN '微信' THEN Scount ELSE 0 END ) 微信 
FROM TabName  
GROUP BY DATE
3、行转列
SELECT DATE,GROUP_CONCAT(NAME) FROM tabname GROUP BY DATE

 

4、行转列统计数据

SELECT DATE, GROUP_CONCAT(NAME,'总量:',Scount) AS b_str FROM tabName GROUP BY DATE
   
SELECT DATE,NAME, GROUP_CONCAT(NAME,'总量:',Scount) AS b_str FROM   TabName GROUP BY DATE ,NAME

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值