数据库
首页 > 数据库> > MySQL – 如何使用concat和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的查询:

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结果拆分为列头?

我想从table2动态获取数据.有些用户可以向table2添加数据.所以硬编码typename是不可能的.

解决方法:

您应该使用表格旋转. MySQL中没有PIVOT命令,因此您可以使用此查询 –

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 pivot tables (transform rows to columns).

如果可能有多个可用值,请使用GROUP_CONCAT函数而不是MAX.

标签:mysql,select,pivot-table,group-concat
来源: https://codeday.me/bug/20190927/1824904.html