2012-07-10 140 views
3

我有幾個大型數據表,它們需要將列轉換爲數據行,列名稱作爲字段中的dat。我可以在Excel中使用合併數據透視表執行此操作,但我擁有的表格對Excel來說很大。一些人擁有多達210個colums和2300行數據,而另一些人擁有20 columsn和150,000行。將MySQL表格從列轉換爲行

我上傳了一個電子表格樣本,用於在box.com或Google文檔中查看。

https://docs.google.com/spreadsheet/ccc?key=0ArwEcGYwGw7kdHZya2haVDRvZ0xIM0kzRXRHZ2pQM1E

https://www.box.com/s/199ce71828c320472b57

我要尋找一個可重複的過程,讓我爲25桌做到這一點,與礦工更改SQL代碼之前,我將它們合併所有爲一個較大的表,在查詢時將使用LOGRECNO和COLUMN ID字段向數據添加附加信息。

任何有關在MySQL中執行此操作的最佳方法的幫助將非常感謝。

+0

[MySQL的數據透視表中可能重複](http://stackoverflow.com/questions/7674786/mysql-pivot-table) – RichardTheKiwi 2013-05-03 09:13:58

回答

1

下應該是最小的變化可重複的流程:

SET @sql = NULL; 
SELECT GROUP_CONCAT(DISTINCT 
    CONCAT('select LOGRECNO, ' 
     '''', 
     COLUMN_NAME, 
     ''' col, ', column_name, ' as value from yourtable' 
    ) separator ' union all ' 
) INTO @sql 
FROM INFORMATION_SCHEMA.COLUMNS 
where table_name = 'yourtable' 
    and column_name <> 'LOGRECNO'; 

set @sql = CONCAT(@sql, ' Order by 1, 2'); 

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

SQL Fiddle with Demo