mysql-行轉列、列轉行
阿新 • • 發佈:2019-01-29
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