日期:2014-05-18  浏览次数:20528 次

求多条记录合并为一条记录的sql语句。
例如我有一张表
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.score
from 
(select *
from TB
where course='语文') TF
inner 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 CourseGrade
pivot (max(score) for course in([语文],英语)) as d 

studentname    语文    英语
李三    50    80
王五    60    70

------解决方案--------------------
探讨

SQL code
select TF.studentname,TF.course,TF.score,TT.course,TT.score
from
(select *
from TB
where course='语文') TF
inner join (select * from TB where course='英语') TT on TT.studentname =TF.studentnam……