SQL竖表转横表 / 横表转竖表
竖表转横表
竖表结构:
Name |
Course |
Grade |
张三 |
语文 |
75 |
张三 |
数学 |
80 |
张三 |
英语 |
90 |
李四 |
语文 |
95 |
李四 |
数学 |
55 |
转换后横表结构:
Name |
语文 |
数学 |
英语 |
张三 |
75 |
80 |
90 |
李四 |
95 |
55 |
0 |
SQL语句:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 select Name, 2 sum(case Course when '语文' then Grade else 0 end) as 语文, 3 sum(case Course when '数学' then Grade else 0 end) as 数学, 4 sum(case Course when '英语' then Grade else 0 end) as 英语 5 from TableA 6 group by Name
横表转竖表
横表结构:
ID |
Name |
Chinese |
Math |
English |
1 |
张三 |
90 |
89 |
80 |
2 |
李四 |
95 |
76 |
38 |
3 |
王五 |
88 |
77 |
67 |
转换后竖表结构:
ID |
姓名 |
科目 |
成绩 |
1 |
张三 |
语文 |
87 |
2 |
张三 |
数学 |
78 |
3 |
张三 |
英语 |
67 |
4 |
李四 |
语文 |
90 |
5 |
李四 |
数学 |
65 |
6 |
李四 |
英语 |
98 |
7 |
王五 |
语文 |
54 |
8 |
王五 |
数学 |
67 |
9 |
王五 |
英语 |
49 |
SQL语句:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 select Name,'Chinese' as 科目,Chinese as 成绩 from tableb union all 2 select Name,'Math' as 科目,Math as 成绩 from tableb union all 3 select Name,'English' as 科目,English as 成绩 from tableb 4 order by Name,科目 desc