2014-11-03 77 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,名字,姓氏