横表与纵表互转
为简单起见,假设横表th如下:
姓名 | 语文 | 数学 | 英语 |
---|---|---|---|
张三 | 83 | 91 | 75 |
李四 | 87 | 74 | 93 |
相应的纵表tv为:
姓名 | 课程 | 成绩 |
---|---|---|
张三 | 语文 | 83 |
张三 | 数学 | 91 |
张三 | 英语 | 75 |
李四 | 语文 | 87 |
李四 | 数学 | 74 |
李四 | 英语 | 93 |
横表转纵表
select 姓名, '语文' as 课程, 语文 from th
union select 姓名, '数学' as 课程, 数学 from th
union select 姓名, '英语' as 课程, 英语 from th;
纵表转横表
select t.姓名, 语文, 数学, 英语 from (select distinct 姓名 From tv) t
left join (select 姓名, 成绩 as 语文 from tv where 课程 = '语文') t1 on t.姓名 = t1.姓名
left join (select 姓名, 成绩 as 数学 from tv where 课程 = '数学') t2 on t.姓名 = t2.姓名
left join (select 姓名, 成绩 as 英语 from tv where 课程 = '英语') t3 on t.姓名 = t3.姓名;