1. 程式人生 > >mysql-行轉列、列轉行

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