我的表的数据为
id | qs | ans
=============
1 | qs1|ans1
1 | qs2|ans2
我需要从此表中获取数据
id | qs1 | qs2
1 | ans1| ans2
注意我不知道有多少行具有相同的 id,而且我不知道 qs 单元格中的数据,因此我无法使用我的数据是文本而不是数字的情况
最佳答案
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
关于mysql 将一张表中的行动态转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47934049/