2013-05-18 3 views
0

웹 응용 프로그램에서 사용하기 위해 아주 기본적인 출력을 조 변경하려고합니다. 내 강점은 MySQL에 moreso 거짓말로서, 나는이 응용 프로그램을 치기 전에이 싶습니다.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;