mysql将行从一个表动态转换为cols

时间:2017-12-21 23:25:13

标签: mysql

我的表格数据为

id | qs | ans         
=============
1  | qs1|ans1 
1  | qs2|ans2

我需要从此表中获取数据

id | qs1 | qs2 
1  | ans1| ans2

注意我不知道有多少行将使用相同的ID,我不知道qs单元格中的数据所以我不能用例我的数据是文本,而不是数字

1 个答案:

答案 0 :(得分:1)

CREATE TABLE qanda
    (`id` int, `qs` varchar(100), `ans` varchar(100));
     

INSERT INTO qanda
    (`id`, `qs`, `ans`)
VALUES
    (1, 'qs1', 'ans1'),
    (1, 'qs2', 'ans2'),
    (1, 'qs3', 'ans3'),
    (1, 'qs4', 'ans4'),
    (1, 'qs5', 'ans4'),
    (2, 'qs1', 'ans1'),
    (2, 'qs2', 'ans2'),
    (2, 'qs3', 'ans3'),
    (2, 'qs4', 'ans4');
     

SELECT GROUP_CONCAT('max(IF(qs=\'',qs,'\', ans, NULL)) AS `',`qs`,'`')
into @query
FROM qanda
where id = 1;

SET @query := concat('select id,',@query,' from qanda where id = 1 group by id');
PREPARE dynamic_statement FROM @query;
EXECUTE dynamic_statement;
DEALLOCATE PREPARE dynamic_statement;
id | qs1  | qs2  | qs3  | qs4  | qs5 
-: | :--- | :--- | :--- | :--- | :---
 1 | ans1 | ans2 | ans3 | ans4 | ans4

dbfiddle demo here