2012-03-09 74 views
2

我試圖做一些報告線圖圖表,發現它最簡單的,如果我從我的查詢返回一個數據行的數據,每列(日期)分組同列這將出現在折線圖中。挑戰是我想要多條線。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  | 

這可能嗎?子查詢?我試過很多東西,謝謝〜

回答

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` 

你不得不因爲有位置,雖然添加儘可能多的欄目,如果你有很多地方它會煩人。也許你可以考慮在代碼方面重新安排(如果你有很多地方)?

+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

0

這就是所謂的這不是一般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