MySQL - 如何使用 concat 和 group_concat 将行值显示为列名

2023-10-08数据库问题
1

本文介绍了MySQL - 如何使用 concat 和 group_concat 将行值显示为列名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

表 1:

id   | typeid | available|
0    | 1      | 12       |
0    | 2      | 44       |

表 2:

typeid   | typename   |
1        | CL          |
2        | ML          |

我有一个使用 concatgroup_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 将行值显示为列名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

Mysql目录里的ibtmp1文件过大造成磁盘占满的解决办法
ibtmp1是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_path参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12M:autoextend,也就是说在文件系统磁盘足够的情况下,这个文件大小是可以无限增长的。 为了避免ibtmp1文件无止境的暴涨导致...
2025-01-02 数据库问题
151

按天分组的 SQL 查询
SQL query to group by day(按天分组的 SQL 查询)...
2024-04-16 数据库问题
77

SQL 子句“GROUP BY 1"是什么意思?意思是?
What does SQL clause quot;GROUP BY 1quot; mean?(SQL 子句“GROUP BY 1是什么意思?意思是?)...
2024-04-16 数据库问题
62

MySQL groupwise MAX() 返回意外结果
MySQL groupwise MAX() returns unexpected results(MySQL groupwise MAX() 返回意外结果)...
2024-04-16 数据库问题
13

MySQL SELECT 按组最频繁
MySQL SELECT most frequent by group(MySQL SELECT 按组最频繁)...
2024-04-16 数据库问题
16

在 Group By 查询中包含缺失的月份
Include missing months in Group By query(在 Group By 查询中包含缺失的月份)...
2024-04-16 数据库问题
12