2014-11-03 58 views
0

需要帮助配置下面的查询:移调列成行在MySQL

查询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'; 

查询1输出:

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

我想这个查询的输出转来看起来像这样:

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

,serial_number作为标题,COLUMN_NAME作为单个行。有任何想法吗?

提前致谢!

回答

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演示

+0

它的工作就像一个魅力。正是我需要的。谢谢。 – mfrancisp 2014-11-06 05:52:24

+0

@mfrancisp你很受欢迎。我很高兴它有帮助。 – peterm 2014-11-06 05:56:07

0

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

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


支点

SELECT GROUP_CONCAT(SERIAL_NUMBER)从枢UNION ALL SELECT GROUP_CONCAT(列)本你会得到导致这样

1,2,3

ID,名字,姓氏