纵表-->横表
纵表A
姓名 | 科目 | 成绩 |
张三 | 语文 | 75 |
张三 | 数学 | 80 |
张三 | 英语 | 90 |
李四 | 语文 | 95 |
李四 | 数学 | 55 |
横表B
姓名 | 语文 | 数学 | 英语 |
张三 | 75 | 80 | 90 |
李四 | 95 | 55 | 0 |
select 姓名,
sum(case 科目 when ‘语文‘ then 成绩 else 0 end) as 语文,
sum(case 科目 when ‘数学‘ then 成绩 else 0 end) as 数学,
sum(case 科目 when ‘英语‘ then 成绩 else 0 end) as 英语
from A
group by 姓名
横表-->纵表
横表结构: K
ID 姓名 语文 数学 英语
1 张三 80 90 70
2 李四 90 85 95
3 王五 88 75 90
转换后的表结构:
ID 姓名 科目 成绩
1 张三 语文 80
2 张三 数学 90
3 张三 英语 70
4 李四 语文 90
5 李四 数学 80
6 李四 英语 99
7 王五 语文 85
8 王五 数学 96
9 王五 英语 88
横表转纵表SQL示例:
SELECT 姓名,'语文' AS 科目,语文 AS 成绩 FROM K UNION ALL
SELECT 姓名,'数学' AS 科目,数学 AS 成绩 FROM K UNION ALL
SELECT 姓名,'英语' AS 科目,英语 AS 成绩 FROM K
ORDER BY 姓名,科目 DESC;