MySQL-如何使用concat和group_concat将行值显示为列名 [英] MySQL - How to display row value as column name using concat and group_concat

查看:340
本文介绍了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将行值显示为列名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆