将列转换为mysql中的行

时间:2014-11-03 05:09:02

标签: mysql sql

需要帮助配置以下查询:

查询1:

SELECT  @s:= @s + 1 serial_number,`COLUMN_NAME` 
FROM  `INFORMATION_SCHEMA`.`COLUMNS`, (SELECT @s:= 0) AS s 
WHERE `TABLE_SCHEMA`='2014rawfiles' 
AND `TABLE_NAME`='012014actives';

Query1输出:

|  serial_number  |  COLUMN_NAME  |
|        1        |      ID       |
|        2        |   FirstName   |
|        3        |   LastName    |
   ... up to 89 rows ...

我试图将此查询的输出转换为如下所示:

|  1  |      2      |     3     |
| ID  |  FirstName  | LastName  |

将serial_number作为标题,将COLUMN_NAME作为单行。有什么想法吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

如果你真的需要这个,你可以使用动态SQL

SET @sql = NULL;

SELECT GROUP_CONCAT(CONCAT('''',column_name, ''' `', @n := @n + 1, '`'))
  INTO @sql
  FROM information_schema.columns CROSS JOIN (SELECT @n := 0) i
 WHERE table_schema = SCHEMA()
   AND table_name = '012014actives'
 ORDER BY ordinal_position;    

SET @sql = CONCAT('SELECT ', @sql);

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

输出:

|  1 |         2 |        3 |
|----|-----------|----------|
| Id | FirstName | LastName |

这是 SQLFiddle 演示

答案 1 :(得分:0)

没有直接的方法可以做到这一点。但是你可以选择一个替代方案,我将告诉你  你。

您无法将值拆分为列,但可以将它们合并到一个列中,并可以进一步将它们拆分为前端。

SELECT group_concat(serial_number)来自pivot union所有SELECT group_concat(COLUMN_NAME)来自
  枢轴

通过这个你会得到这样的结果

1,2,3

ID,FirstName,LastName