2014-12-04 112 views
1

我有一個簡單的表格來描述這樣的單元格。此表cells包含3個字段:column_id,row_id,value。此表不能爲同一對夫婦(column_id, row_id)設定價值。如何獲取mySQL表格的矩陣

例如,這包含論文值:

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

這是非常「簡單」這裏的例子,但有超過20,000行和50列。

我在尋找一個快速的方法來獲得結果作爲基質,如Excel做:

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

現在,我成功了一組SELECT的,像這樣的

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 

此查詢不可讀,也未優化。 你有更好的主意來做這件事嗎?

問候

+0

我不認爲這是一個更好的辦法。 – GolezTrol 2014-12-04 11:10:30

回答

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; 

如果要動態擷取列然後使用下面的代碼:

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;