在固定列的情況下,可以group by後把每個列要顯示的數據通過if指定寫到sql裏:
...
SUM(IF(條件,輸出的列,默認值)),
SUM(IF(條件,輸出的列,默認值))
...
group by xxx
...
在動態列的情況,可以使用預編譯:
1,先用group_concat將動態行轉出一行賦值給變量
2,然後用多個變量組裝成最後要執行的sql,再執行
SET @SQL_1 =
(
SELECT GROUP_CONCAT(',',subject_name)
FROM subject
GROUP BY ...
);
SET @SQL_ALL = CONCAT(' select ... ',@SQL_1,'...');
--SET @SQL_2 =...
--SET @SQL_ALL = CONCAT_WS(' UNION ALL ',@SQL_1,@SQL_2);
PREPARE stmt FROM @SQL_ALL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;