mysql 将一张表中的行动态转换为列

标签 mysql

我的表的数据为

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

dbfiddle demo here

关于mysql 将一张表中的行动态转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47934049/

相关文章:

mysql - 将数组存储到php中的变量中

mysql - 复合查询

php - SQL - 如何避免为并发连接选取同一行?

c++ - 无法找到 -libmysql 或 undefinder 引用 -mysqllib 和 mysql 库

php - CodeIgniter日历: storing and updating checkbox values per day

MySQL:正确使用 "NOT IN"子句

mysql - sql : select some column which I don't know the entire name

mysql - 无法为 Pod 安装卷

php - 如何创建 jquery 函数来防止向数据库重复输入

Mysql嵌套查询传递一个值给嵌套查询