将MySQL表从列转换为行

时间:2012-07-10 13:16:47

标签: mysql pivot transpose

我有几个大型数据表,需要将列转换为数据行,列名称为字段中的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中执行此操作的最佳方法的帮助都会非常感激。

2 个答案:

答案 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;

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

这是数据透视表问题。

以下是快速动态解决方案的精彩教程: http://datacharmer.org/downloads/pivot_tables_mysql_5.pdf