2014-12-04 2 views
1

나는 이와 같은 셀을 설명하는 간단한 테이블을 가지고있다. 이 테이블 cells에는 column_id, row_id, value의 세 필드가 있습니다. 이 테이블에는 동일한 커플 (column_id, row_id)에 대한 값을 사용할 수 없습니다. 이것은 예를 들어 여기에 아주 "간단한"하지만, 이상 20.000 행과 50 열이mySQL 테이블의 행렬을 얻는 방법

id column_id row_id value 
1 0   0  'a' 
2 0   1  'b' 
3 1   0  'c' 

:

예를 들어,이 논문의 값이 포함되어 있습니다. 지금은

row_id column_0 column_1 
0  'a'  'c' 
1  'b'   NULL 

SELECT row_id, 
    SELECT (value FROM cells AS cells_row_1 WHERE cells.row_id=cells_row_1.row_id AND column_id=1) AS column_1, 
    SELECT (value FROM cells AS cells_row_2 WHERE cells.row_id=cells_row_2.row_id AND column_id=2) AS column_2 
FROM cells 

처럼 SELECT의 세트로 I 성공 : Excel에서하는 것처럼

나는, 매트릭스 같은 결과를 얻을 수있는 빠른 방법을 찾고 있어요 이 쿼리는 읽을 수 없으며 최적화되지 않았습니다. 더 좋은 생각이 있습니까?

감사

+0

내가 더 나은 방법이라고 생각하지 않습니다 :

SELECT row_id, MAX(CASE WHEN c.column_id = 1 THEN c.value ELSE '' END) AS column_1, MAX(CASE WHEN c.column_id = 2 THEN c.value ELSE '' END) AS column_2 FROM cells c GROUP BY c.row_id; 

당신이 다음 코드 아래 사용 동적으로 열을 인출하려면

. – GolezTrol

답변

0

이 시도 :

SELECT GROUP_CONCAT('MAX(CASE WHEN c.column_id = ', c.column_id, ' THEN c.value ELSE '''' END) AS column_', c.column_id) INTO @query 
FROM (SELECT DISTINCT column_id FROM cells c) AS c; 

SET @s = CONCAT("SELECT row_id, ", @query, "FROM cells c GROUP BY c.row_id;"); 

PREPARE stmt FROM @s; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
관련 문제