2012-10-30 3 views
1

mySQL에 문제가 있습니다. 나는이 같은 테이블이 있습니다mySQL에 동적 테이블 생성

Time     Sensor Value 
2012-10-16 14:42:32 VI0 0  
2012-10-16 14:42:32 VI1 0  
2012-10-16 14:42:32 VI2 0  
2012-10-16 14:42:32 VI3 0  
2012-10-16 14:42:33 VI0 1  
2012-10-16 14:42:33 VI1 1  
2012-10-16 14:42:33 VI2 1  
2012-10-16 14:42:33 VI3 1  

내가 모든 이름 센서 및 기타 정보가있는 테이블 "sensor"가 있습니다.

Time     VI0  VI1  VI2 VI3 

2012-10-16 14:42:32 0  0   0  0 

2012-10-16 14:42:32 1  1   1  1 

내가 피벗 테이블을 찾고 있어요하지만 올바른 방법 인 경우 모르겠어요 : 은 가능한 같은 테이블에 해당 테이블을 재 배열입니다.

P. 어쩌면 해결책을 찾았습니다.

센서에서 SELECT 시간 GROUP_CONCAT (값)은 measure2 GROUP BY 시간으로;

시간 GROUP_CONCAT (값) 대신 GROUP_CONCAT의

2012년 10월 16일 14시 42분 32초 0,0,0,0

난 쉼표 센서의 이름을 기록 할 수?

+0

[동적 피벗 테이블] (http://buysql.com/mysql/14-how-to-automate-pivot-tables.html), [피벗 테이블 쿼리 자동화] (http : //www.artfulsoftware.com/infotree/queries.php#523). – Devart

+0

VI0 등은 항상 0 또는 1입니까, 아니면 값이 다른가요? –

+0

@MichaelBerkowski는 다른 값을 가지고 있습니다. 측정 플랜트입니다. – vincenzoAlessandroSantamaria

답변

3

데이터를 동적으로 pivot에 준비된 문을 사용해야한다고 생각합니다. 다음 코드 하드 값 수, 당신은 값을 알고있는 경우

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'max(case when Sensor = ''', 
     Sensor, 
     ''' then value end) AS ', 
     Sensor 
    ) 
) INTO @sql 
FROM measure2; 

SET @sql = CONCAT('SELECT time, ', @sql, ' 
        FROM measure2 
        GROUP BY time'); 

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

SQL Fiddle with Demo

를 참조하십시오 : 이것은 CASE 문으로 집계 함수를 사용합니다

select time, 
    max(case when sensor = 'VI0' then value end) as VI0, 
    max(case when sensor = 'VI1' then value end) as VI1, 
    max(case when sensor = 'VI2' then value end) as VI2, 
    max(case when sensor = 'VI3' then value end) as VI3 
from measure2 
group by time 

참조 SQL Fiddle with Demo

+0

대단히 감사합니다 !!!! – vincenzoAlessandroSantamaria

관련 문제