mysql 行转列写法
时间: 2023-12-01 20:43:49 浏览: 31
以下是 MySQL 中实现行转列的方法:
1. 使用 GROUP_CONCAT 函数将多行数据合并成一行,并用逗号分隔。
2. 使用 FIND_IN_SET 函数将合并后的数据按照逗号分隔后的每个值进行拆分,并将其转换为多行数据。
3. 使用 CASE WHEN 语句将每个值转换为对应的列。
例如,有如下表格:
| id | name | score |
|----|------|-------|
| 1 | Tom | 80 |
| 2 | Jack | 90 |
| 3 | Lucy | 85 |
现在需要将其转换为如下形式:
| name | score1 | score2 | score3 |
|------|--------|--------|--------|
| Tom | 80 | NULL | NULL |
| Jack | NULL | 90 | NULL |
| Lucy | NULL | NULL | 85 |
可以使用以下 SQL 语句实现:
```mysql
SELECT name,
MAX(CASE WHEN rn = 1 THEN score END) AS score1,
MAX(CASE WHEN rn = 2 THEN score END) AS score2,
MAX(CASE WHEN rn = 3 THEN score END) AS score3
FROM (
SELECT name,
SUBSTRING_INDEX(SUBSTRING_INDEX(scores, ',', rn), ',', -1) AS score,
rn
FROM (
SELECT name,
GROUP_CONCAT(score ORDER BY id) AS scores
FROM scores_table
GROUP BY name
) t1
JOIN (
SELECT 1 AS rn
UNION ALL SELECT 2
UNION ALL SELECT 3
) t2
ON LENGTH(scores) - LENGTH(REPLACE(scores, ',', '')) >= rn - 1
) t3
GROUP BY name;
```
其中,scores_table 是需要进行行列转换的表格,score 是需要转换的列名,name 是需要作为行名的列名,rn 是行号,可以根据需要进行修改。