2013-05-18 81 views
0

我正在嘗試轉置用於Web應用程序的非常基本的輸出。由於我的優勢在於MySQL,因此我希望在它碰到應用程序之前。將行轉換爲MYSQL中的標題

我目前擁有的是:

date   value 
2012-01-01 23 
2012-01-02 33 
2012-01-03 56 
2012-01-04 10 

我要的是:

2012-01-01 2012-01-02 2012-01-03 2012-01-04 
23   33   56   10 

我的SQL是:

SELECT 

date, 
value 
from values 
where date >= curdate() - interval 3 day 

我已經做了一噸的研究在線我找不出一個好辦法來做到這一點。由於日期每天都在變化,因此這需要具有動態性。

+1

MySQL不與 _dynamic_列很好地工作。爲什麼不以PHP爲中心呢? – Halcyon

+1

@FritsvanCampen,它不僅僅是MySQL - 沒有SQL數據庫可以在查詢結果中創建新列,因爲它掃描行並發現新的不同值。 SQL需要在準備時間修復所有列。 –

回答

3

這裏是一個動態sql轉動記錄,

SET @sql = NULL; 

SELECT GROUP_CONCAT(DISTINCT 
     CONCAT('MAX(CASE WHEN date = ''', 
       date, 
       ''' THEN Value ELSE NULL END) AS ', 
       CONCAT('`', date, '`') 
       )) INTO @sql 
FROM TableName 
// WHERE date >= curdate() - interval 3 day // add condition here 
ORDER BY date; 



SET @sql = CONCAT('SELECT ', @sql, ' 
        FROM TableName'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt;