我正在尝试做一些报表折线图,如果我从查询中返回一个数据行,我会发现它最简单,这些数据行将出现在折线图中。挑战在于我需要不止一条线。
以下是我可以使用简化的数据示例:
| DATE | SALES | LOCATION |
| 2012-01-07 | 500 | 1 |
| 2012-01-07 | 600 | 2 |
| 2012-01-14 | 700 | 1 |
| 2012-01-14 | 400 | 2 |
| 2012-01-21 | 450 | 1 |
| 2012-01-21 | 550 | 2 |
选择日期,总和(销售额)作为SalesTotal1 FROM TABLE
WHERE location ='1'按日期分组
返回:
| DATE | SalesTotal1 |
| 2012-01-07 | 500 |
| 2012-01-14 | 700 |
| 2012-01-21 | 450 |
如果我的图表中只有一行,但我真正想要的是同一列的多个别名仍然按日期分组,这样就可以了:
| DATE | SalesTotal1 | SalesTotal2 |
| 2012-01-07 | 500 | 600 |
| 2012-01-14 | 700 | 400 |
| 2012-01-21 | 450 | 550 |
这可能吗?子查询?我尝试了很多东西,谢谢〜
答案 0 :(得分:2)
您可以执行以下操作:
SELECT `date`,
SUM(IF(location=1,sales,0)) As SalesTotal1,
SUM(IF(location=2,sales,0)) As SalesTotal2
FROM my_table
GROUP BY `date`
你必须添加尽可能多的列,如果你有很多位置,那就太烦人了。也许你可以考虑在代码方面重新安排(如果你有很多很多地方)?
答案 1 :(得分:0)
这称为PIVOT表查询,MYSQL通常不支持该查询。但是,如果您确切知道位置,则可以使用一系列子查询来完成。如果您不知道确切的位置,则必须编写一个存储过程来查找位置并构建查询字符串然后执行。以下是如何做两个位置:
SELECT
date,
SalesTotal1,
SalesTotal2
FROM (
SELECT
date,
sum(sales) as SalesTotal1
FROM TABLE
WHERE location = '1'
group by date
) S1
INNER JOIN (
SELECT
date,
sum(sales) as SalesTotal2
FROM TABLE
WHERE location = '2'
group by date
) S2 ON S1.date=S2.date