MySQL - How to display row value as column name using concat and group_concat(MySQL - 如何使用 concat 和 group_concat 将行值显示为列名)
问题描述
表 1:
id | typeid | available|
0 | 1 | 12 |
0 | 2 | 44 |
表 2:
typeid | typename |
1 | CL |
2 | ML |
我有一个使用 concat
和 group_concat
的查询:
I have a query using concat
and group_concat
:
select id,concat(group_concat(typename,available)) as types from table1
join table2 on table2.typeid=table1.typeid
我得到的结果是:
id | types |
0 | CL12,ML44 |
但我想这样显示:
id | CL | ML |
0 | 12 | 44 |
有什么方法可以将 group_concat
结果拆分为 列头?
Is there any way to split the group_concat
result to columns heads?
我想从 table2 动态获取数据.某些用户可以将数据添加到 table2.所以硬编码 typename 是不可能的.
I want dynamically fetch data from table2. Some user can add data to table2. So hard-coding typename is not possible.
推荐答案
您应该使用表格透视.MySQL中没有PIVOT命令,可以用这个查询-
You should use table pivoting. There is no PIVOT command in MySQL, so you can use this query -
SELECT
t1.id,
MAX(IF(t2.typename = 'CL', t1.available, NULL)) AS CL,
MAX(IF(t2.typename = 'ML', t1.available, NULL)) AS ML
FROM table1 t1
JOIN table2 t2
ON t1.typeid = t2.typeid
GROUP BY
t1.id;
MySQL 数据透视表(将行转换为列).
如果可能有多个 available
值,请使用 GROUP_CONCAT 函数而不是 MAX.
Use GROUP_CONCAT function instead of MAX, if multiple available
values are possible.
这篇关于MySQL - 如何使用 concat 和 group_concat 将行值显示为列名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:MySQL - 如何使用 concat 和 group_concat 将行值显示为列名


基础教程推荐
- ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
- CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
- 带更新的 sqlite CTE 2022-01-01
- MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
- 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
- 带有WHERE子句的LAG()函数 2022-01-01
- MySQL 5.7参照时间戳生成日期列 2022-01-01
- while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01
- 从字符串 TSQL 中获取数字 2021-01-01
- 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01