--数据结构
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
--执行结果
1 2004级2班 2004 付超 89 85 56
2 2004级2班 2004 李明 45 100 75
3 2004级2班 2004 王强 78 90 89