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 将行值显示为列名
				
        
 
            
        - 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
 - 在SQL中,如何为每个组选择前2行 2021-01-01
 - 更改自动增量起始编号? 2021-01-01
 - 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
 - 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
 - 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
 - SQL 临时表问题 2022-01-01
 - 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
 - 导入具有可变标题的 Excel 文件 2021-01-01
 - 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
 
						
						
						
						
						
				
				
				
				