Mysql 行转列、列转行
1. 行转列
1.1 伪 SQL
select 分组列,
聚合函数(case 转换列 when 转换列值1 then 数据列 else .... end) as 列名1,
聚合函数(case 转换列 when 转换列值2 then 数据列 else .... end) as 列名2,
聚合函数(case 转换列 when 转换列值3 then 数据列 else .... end) as 列名3
...
from 表名
group by 分组列;
1.2 条件 --> 结果
## 条件
张三 语文 78
张三 数学 87
张三 英语 65
李四 语文 88
李四 数学 90
李四 英语 98
王五 语文 73
王五 数学 88
王五 英语 90
## 目标结果
name 语文 数学 英语
张三 78 87 65
李四 88 90 98
王五 73 88 90
select name,
max(case subject when '语文' then score else null end) as '语文',
max(case subject when '数学' then score else null end) as '数学',
max(case subject when '英语' then score else null end) as '英语'
from stu_score group by name;
2. 列转行
2.1 伪 SQL
select 非转换列,'转换列1' as 新转换列名,转换列1 as 新数据列名 from 表名
union all
select 非转换列,'转换列2' as 新转换列名,转换列2 as 新数据列名 from 表名
union all
select 非转换列,'转换列3' as 新转换列名,转换列3 as 新数据列名 from 表名
order by ....;
#注:union all的所有语句的字段名都需要保持一致
2.2 条件 --> 结果
## 条件
name 语文 数学 英语
张三 78 87 65
李四 88 90 98
王五 73 88 90
## 目标结果
张三 语文 78
张三 数学 87
张三 英语 65
李四 语文 88
李四 数学 90
李四 英语 98
王五 语文 73
王五 数学 88
王五 英语 90
select name,'语文' as subject,语文 as 'score' from stu_score_row_columns
union all
select name,'数学' as subject,数学 as 'score' from stu_score_row_columns
union all
select name,'英语' as subject,英语 as 'score' from stu_score_row_columns
order by name;
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果