移调列成行在MySQL
问题描述:
需要帮助配置下面的查询:移调列成行在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作为单个行。有任何想法吗?
提前致谢!
答
如果你真的需要这个,你可以用动态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演示
答
支点
有没有直接的方法来做到这一点。但你可以选择一个替代品,我将告诉你
你。
您无法将值拆分为列,但可以将它们合并到一个列中,并可以将它们进一步拆分为您的前端。
从支点
SELECT GROUP_CONCAT(SERIAL_NUMBER)从枢UNION ALL SELECT GROUP_CONCAT(列)本你会得到导致这样
1,2,3
ID,名字,姓氏
它的工作就像一个魅力。正是我需要的。谢谢。 – mfrancisp 2014-11-06 05:52:24
@mfrancisp你很受欢迎。我很高兴它有帮助。 – peterm 2014-11-06 05:56:07