我有这个选择
SELECT
products.prod_name, SUM(beg_inv - end_inv) AS inv,
MONTH(task_date) MONTH
FROM performances
INNER JOIN tasks
ON performances.task_id = tasks.task_id
INNER JOIN people
ON people.person_id = tasks.emp_id
INNER JOIN products
ON performances.prod_id = products.prod_id
WHERE YEAR(task_date) = '2013'
GROUP BY performances.prod_id, MONTH(task_date)
ORDER BY MONTH(task_date), prod_name
它的输出是:
Prod name inv month
Product 1 5 3
Product 1 10 5
我想像这样传播它:
Product Name January February March April May June July August September October November December
Product 1 5 10
是否可以无需进行透视而只需选择?
最佳答案
只需在 SQL 中执行数据透视操作,如下所示:
SELECT products.prod_name,
SUM(case when MONTH(task_date) = 1 then beg_inv - end_inv end) AS January,
SUM(case when MONTH(task_date) = 2 then beg_inv - end_inv end) AS February,
SUM(case when MONTH(task_date) = 3 then beg_inv - end_inv end) AS March,
. . .
FROM performances
INNER JOIN tasks
ON performances.task_id = tasks.task_id
INNER JOIN people
ON people.person_id = tasks.emp_id
INNER JOIN products
ON performances.prod_id = products.prod_id
WHERE YEAR(task_date) = 2013
GROUP BY products.prod_name,
ORDER BY products.prod_name,;
请注意,这还需要对 GROUP BY
和 ORDER BY
子句进行少量更改。
关于mysql - SQL Select 将行数据分散到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22177982/