对于这样的问题,我见过很多答案,但是没有一个问题得到解释,因此我无法理解它,也无法用于我的案例。
SELECT st.name, SUM(sa.val), sa.sale_date FROM sales sa
INNER JOIN employee e ON sa.employee_id
INNER JOIN store st ON e.store_id
GROUP BY st.name, sa.sale_date
考虑到以下查询结果:
http://sqlfiddle.com/#!9/0faa35/5
+---------+-------------+------------------------+
| name | SUM(sa.val) | sale_date |
+---------+-------------+------------------------+
| Store 1 | 800 | July, 29 2015 00:00:00 |
| Store 1 | 700 | July, 30 2015 00:00:00 |
| Store 2 | 800 | July, 29 2015 00:00:00 |
| Store 2 | 700 | July, 30 2015 00:00:00 |
+---------+-------------+------------------------+
我需要转接(将商店名称分组),这样它就变成了:
+------------+---------+---------+
| Date | Store 1 | Store 2 |
+------------+---------+---------+
| 2015-07-29 | 800 | 800 |
| 2015-07-30 | 700 | 700 |
+------------+---------+---------+
发布于 2015-08-05 04:20:21
您可以使用准备好的查询:
SELECT CONCAT(
'SELECT sales.sale_date,',
GROUP_CONCAT('SUM(
CASE WHEN employee.store_id = ', id , '
THEN val
ELSE 0 END) AS `', REPLACE(name, ' ', ''), '`' SEPARATOR ','),
' FROM
employee
INNER JOIN sales ON(employee.id = employee_id)
GROUP BY sales.sale_date'
) INTO @qry FROM (SELECT name,id FROM store) as stores;
PREPARE stmt FROM @qry;
EXECUTE stmt;
Fiddle: http://sqlfiddle.com/#!9/0faa35/39/2
发布于 2015-08-05 02:47:51
这是一个基本的枢轴查询。在MySQL中,最简单的方法是条件聚合。给定SQL Fiddle中的查询,逻辑如下:
SELECT sa.sale_date,
SUM(CASE WHEN st.name = 'Store 1' THEN val ELSE 0 END) as Store1,
SUM(CASE WHEN st.name = 'Store 2' THEN val ELSE 0 END) as Store2
FROM sales sa INNER JOIN
employee e
ON sa.employee_id INNER JOIN
store st
ON e.store_id
GROUP BY sa.sale_date;
注意:你应该把实际的问题放在你的问题上。
这里是一个SQL。
https://stackoverflow.com/questions/31822563
复制相似问题