mysql动态列转行
时间: 2023-12-01 20:43:50 浏览: 90
MySQL中可以使用GROUP_CONCAT函数和CASE语句来实现动态列转行。具体步骤如下:
1.使用GROUP_CONCAT函数将需要转换的列合并成一个字符串,同时使用CONCAT函数将需要转换的列名作为前缀,以便后续使用SUBSTRING_INDEX函数进行拆分。
2.使用CASE语句将需要转换的列名作为条件,将合并后的字符串拆分成多个字段,每个字段对应一个需要转换的列。
3.将拆分后的字段与其他需要保留的列一起进行查询。
以下是一个示例代码:
```mysql
SELECT
id,
SUBSTRING_INDEX(SUBSTRING_INDEX(group_concat(CONCAT('score_', subject)), ',', 1), '_', -1) AS subject1,
SUBSTRING_INDEX(SUBSTRING_INDEX(group_concat(CONCAT('score_', subject)), ',', 2), ',', -1) AS subject2,
SUBSTRING_INDEX(SUBSTRING_INDEX(group_concat(CONCAT('score_', subject)), ',', 3), ',', -1) AS subject3
FROM scores
GROUP BY id;
```
上述代码中,假设有一个成绩表scores,其中包含id、subject和score三个字段,需要将subject列中的不同科目转换成动态列,最终查询结果包含id、subject1、subject2和subject3四个字段,分别对应不同的科目。
阅读全文