MySQL查询返回不同的别名日期为线图

问题描述:

我试图做一些报告线图图表,发现它最简单的,如果我从我的查询返回一个数据行的数据,每列(日期)分组同列这将出现在折线图中。挑战是我想要多条线。MySQL查询返回不同的别名日期为线图

这是我可以与数据的简化示例做:WHERE位置=按日期

它返回 '1' 组

| 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  | 

SELECT日期,和(销售)作为SalesTotal1 FROM TABLE

|  DATE | SalesTotal1 | 
    | 2012-01-07 |  500  | 
    | 2012-01-14 |  700  | 
    | 2012-01-21 |  450  | 

那很好,如果我只是在我的图中的一个线,但我真的想按日期还是分组的同一列的多个别名使得w可以退货:

|  DATE | SalesTotal1 | SalesTotal2 | 
    | 2012-01-07 |  500  |  600  | 
    | 2012-01-14 |  700  |  400  | 
    | 2012-01-21 |  450  |  550  | 

这可能吗?子查询?我试过很多东西,谢谢〜

你可以这样做:

SELECT `date`, 
     SUM(IF(location=1,sales,0)) As SalesTotal1, 
     SUM(IF(location=2,sales,0)) As SalesTotal2 
FROM my_table 
GROUP BY `date` 

你不得不因为有位置,虽然添加尽可能多的栏目,如果你有很多地方它会烦人。也许你可以考虑在代码方面重新安排(如果你有很多地方)?

+0

非常感谢所有,这个答案是一个快速简单的解决方案,我的需要。 – 2012-03-09 02:29:24

+0

这看起来接近我需要的东西,使用IF。我一直在使用UNION,但它只在第一个SELECT的别名下分组结果。我需要这样的东西: 'IF(WHERE描述LIKE '1.1%')AS DESC1, IF(WHERE描述LIKE '1.2%')AS desc2' 这可能吗? – TARKUS 2017-04-22 14:18:15

这就是所谓的这不是一般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