--数据结构
ID
int
4
0
Grade
varchar
50
1
ExamYear
varchar
50
1
Name
varchar
50
1
Subject
varchar
50
1
Score
int
4
1
--数据体
ID
Grade
ExamYear
Name
Subject
Score
1.
2004级2班
2004
李明
数学
100
2.
2004级2班
2004
王强
数学
90
3.
2004级2班
2004
付超
数学
85
4.
2004级2班
2004
李明
语文
75
5.
2004级2班
2004
王强
语文
89
6.
2004级2班
2004
付超
化学
89
7.
2004级2班
2004
李明
化学
45
8.
2004级2班
2004
王强
化学
78
9.
2004级2班
2005
李明
数学
89
10.
2004级2班
2005
王强
数学
88
11.
2004级2班
2005
付超
数学
86
12.
2004级2班
2005
李明
语文
78
13.
2004级2班
2005
王强
语文
92
14.
2004级2班
2005
付超
化学
94
15.
2004级2班
2005
付超
语文
59
16.
2004级2班
2005
李明
化学
54
17.
2004级2班
2005
王强
化学
80
--SQL语句
Declare@SqlStrnvarchar(2000)
--构建Sql语句,生成2004级2班2004年的考虑成绩表
Select@SqlStr='selectGrade,ExamYear,Name,'
--生成条件选择语句,使用Distinct把所有科目全部列出,当然,可以加上条件,如:仅某一年度的考试科目
Select@SqlStr=@SqlStr+'SUM(CASESubjectWHEN'''+Subject+'''THENScoreELSE0END)AS'''+Subject+''','from(SelectDistinctSubjectfromExamResultwhereExamYear=2004)AsTemTable
--补全Sql语句,并使用GroupBy对重复的记录进行汇总
Select@SqlStr=left(@SqlStr,Len(@SqlStr)-1)+'fromExamResultwhereExamYear=2004GroupByName,Grade,ExamYear'
--执行Sql
Exec(@SqlStr)
Go
--执行结果
Grade ExamYear Name 化学 数学 语文
1 2004级2班 2004 付超 89 85 56
2 2004级2班 2004 李明 45 100 75
3 2004级2班 2004 王强 78 90 89