1、纵表转横表:

纵表结构 TableA

Name

Course

Grade

张三

语文

75

张三

数学

80

张三

英语

90

李四

语文

95

李四

数学

55

横表结构 TableB

Name

语文

数学

英语

张三

75

80

90

李四

95

55

0

方法一:

select Name,

sum(case Course when ‘语文‘ then Grade else 0 end) as 语文,

sum(case Course when ‘数学‘ then Grade else 0 end) as 数学,

sum(case Course when ‘英语‘ then Grade else 0 end) as 英语

from TableA

group by Name

2、横表转纵表的"SQL"示例
横表结构: TEST_H2Z
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 TEST_H2Z UNION ALL
SELECT 姓名,'数学' AS 科目,数学 AS 成绩 FROM TEST_H2Z UNION ALL
SELECT 姓名,'英语' AS 科目,英语 AS 成绩 FROM TEST_H2Z
ORDER BY 姓名,科目 DESC; 

现在要求写出查询语句得到如下结果:
姓名 语文 英语 物理 总分 平均分
张三 74 88 90 252 84
李四 88 67 95 250 83.33
sql:
select name '姓名',
max(case subject when '语文' then result else 0 end) 语文,
max(case subject when '物理' then result else 0 end) 物理,
max(case subject when '英语' then result else 0 end)英语,
sum(result) as 总分,
avg(result) as 平均分
from tb
group by name


本文转载:CSDN博客