2012-07-10 132 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