使用MySQL的PIVOT功能,将行数据转换为列数据,同时根据需要聚合数据。以下是示例代码:
原始数据表:
+----+--------+--------+--------+ | id | month | income | expense| +----+--------+--------+--------+ | 1 | Jan | 1000 | 200 | | 2 | Jan | 1500 | 300 | | 3 | Feb | 2000 | 400 | | 4 | Mar | 2500 | 500 | +----+--------+--------+--------+
透视表查询:
SELECT month, SUM(CASE WHEN id=1 THEN income ELSE 0 END) AS 'Jan_income_1', SUM(CASE WHEN id=1 THEN expense ELSE 0 END) AS 'Jan_expense_1', SUM(CASE WHEN id=2 THEN income ELSE 0 END) AS 'Jan_income_2', SUM(CASE WHEN id=2 THEN expense ELSE 0 END) AS 'Jan_expense_2', SUM(CASE WHEN id=3 THEN income ELSE 0 END) AS 'Feb_income_3', SUM(CASE WHEN id=3 THEN expense ELSE 0 END) AS 'Feb_expense_3', SUM(CASE WHEN id=4 THEN income ELSE 0 END) AS 'Mar_income_4', SUM(CASE WHEN id=4 THEN expense ELSE 0 END) AS 'Mar_expense_4' FROM table_name GROUP BY month;
透视表输出结果:
+--------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ | month | Jan_income_1 | Jan_expense_1 | Jan_income_2 | Jan_expense_2 | Feb_income_3 | Feb_expense_3 | Mar_income_4 | Mar_expense_4 | +--------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ | Jan | 1000 | 200 | 1500 | 300 | 0 | 0 | 0 | 0 | | Feb | 0 | 0 | 0 | 0 | 2000 | 400 | 0 | 0 | | Mar | 0 | 0 | 0 | 0 | 0 | 0 | 2500 | 500 | +--------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+