我有几个大型数据表,需要将列转换为数据行,列名称为字段中的dats。我可以使用合并数据透视表在Excel中执行此操作,但我拥有的表对Excel来说很大。有些有多达210个列,有2300行数据,有些则有20个columsn和150,000行。
我已在电子表格中上传了一个示例,以便在box.com或Google文档中查看。
https://docs.google.com/spreadsheet/ccc?key=0ArwEcGYwGw7kdHZya2haVDRvZ0xIM0kzRXRHZ2pQM1E
https://www.box.com/s/199ce71828c320472b57
我正在寻找一个可重复的过程,允许我在25个表中执行此操作,并对SQL代码进行矿工更改,然后将它们全部合并到一个更大的表中,该表将使用LOGRECNO和COLUMN ID字段在查询数据时向数据添加其他信息。
任何有关在MySQL中执行此操作的最佳方法的帮助都会非常感激。
答案 0 :(得分: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;
答案 1 :(得分:0)
这是数据透视表问题。
以下是快速动态解决方案的精彩教程: http://datacharmer.org/downloads/pivot_tables_mysql_5.pdf