2016-11-11 62 views
0

我需要顯示存儲在MySQL數據庫表中的數據的彙總MySQL查詢顯示行數據爲列

control_point_run

run_date control_point duration 
10/10/2016 A 100 
10/10/2016 B 200 
10/10/2016 C 150 
10/11/2016 A 160 
10/11/2016 B 220 
10/11/2016 C 180 
10/12/2016 A 200 
10/12/2016 B 120 
10/12/2016 C 180 

預期輸出

run_date A B C 
10/10/2016 100 200 150 
10/11/2016 160 220 180 
10/12/2016 200 120 180 

Requirement image 請幫我用MySQL查詢來獲得預期的結果。我不知道如何將行數據轉換爲列標題[A,B,C]。

請注意,需要的列名(A,B,C)需要根據可用數據自動生成。該表中包含的數據比此示例中的數據更多,並且未來還可以插入更多的control_point值。

+0

你試過谷歌? – Prasad

回答

2

使用樞軸查詢:

SELECT run_date, 
     MAX(CASE WHEN control_point = 'A' THEN duration END) AS A, 
     MAX(CASE WHEN control_point = 'B' THEN duration END) AS B, 
     MAX(CASE WHEN control_point = 'C' THEN duration END) AS C 
FROM yourTable 
GROUP BY run_date 
+0

感謝您的快速響應。情況比樣本數據有點複雜。我需要根據可用數據自動生成「A,B,C」等列。因爲這些數據也可以更改, –

+0

然後,您可能需要在這種情況下使用動態SQL。你有沒有試過Google? –

+0

它試圖谷歌,但不是「動態SQL」我沒有這個想法。並沒有想法創建簡單的搜索術語來解釋這個要求。也會嘗試使用術語「動態SQL」。 –

0

這可能是正確的。 請檢查這個:

SELECT run_date, 
    (SELECT duration from tablename where control_point = 'A') as 'A', 
    (SELECT duration from tablename where control_point = 'B') as 'B', 
    (SELECT duration from tablename where control_point = 'C') as 'C' 
FROM tablename 
GROUP BY run_date; 
+0

與此,結果不顯示「持續時間」。 –

+0

哦....現在檢查它請 – Anands23

+0

感謝您的建議,但其結果包含重複的數據,顯示應爲null的位置錯誤的持續時間值。並且,我的要求「列名(A,B,C)需要基於可用數據自動生成」並不像您的建議那樣可用,我必須爲所有列編寫子選擇語句。意味着如果表中有一個新的control_point,它將不會在此查詢的結果中,直到我爲其添加子查詢。 –