例如我有一张表
varchr(50) varchr(50) float
学生姓名 课程 成绩
studentname course score
李三 语文 50
李三 英语 80
王五 语文 60
王五 英语 70
我现在想要的查询结果是
李三 语文 50 英语 80
王五 语文 60 英语 70
想了半天也没想出来。求大神指点。
表和数据sql语句:
- SQL code
create table CourseGrade(studentname varchar(50),course varchar(50),score float)insert into CourseGrade values('李三','语文',50)insert into CourseGrade values('李三','英语',80)insert into CourseGrade values('王五','语文',60)insert into CourseGrade values('王五','英语',70)
------解决方案--------------------
- SQL code
select studentname,sum(case when course = '语文' then score else 0 end) as '语文' ,sum(case when course = '英语' then score else 0 end) as '英语' from TB group by studentname/*studentname 语文 英语----------- ----------- -----------李三 50 80王五 60 70(2 行受影响)
------解决方案--------------------
- SQL code
select TF.studentname,TF.course,TF.score,TT.course,TT.scorefrom (select *from TBwhere course='语文') TFinner join (select * from TB where course='英语') TT on TT.studentname =TF.studentname/*studentname course score course score----------- ------ ----------- ------ -----------李三 语文 50 英语 80王五 语文 60 英语 70(2 行受影响)
------解决方案--------------------
行专列 SQL 2000用2楼
SQL 2005以上
- SQL code
select studentname,语文,英语from CourseGradepivot (max(score) for course in([语文],英语)) as d studentname 语文 英语李三 50 80王五 60 70
------解决方案--------------------