这是一张成绩表(成绩表)
学号 课程 成绩
1 语文 89
2 语文 89
3 语文 78
1 数学 78
2 数学 98
3 数学 67
1 英语 89
2 英语 87
3 英语 78
查询出来是这种效果
学号 语文 数学 英语
1 89 78 89
2 89 98 87
3 78 67 78怎么用SQL语句实现呀???
学号 课程 成绩
1 语文 89
2 语文 89
3 语文 78
1 数学 78
2 数学 98
3 数学 67
1 英语 89
2 英语 87
3 英语 78
查询出来是这种效果
学号 语文 数学 英语
1 89 78 89
2 89 98 87
3 78 67 78怎么用SQL语句实现呀???
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb (学号 int,课程 varchar(4),成绩 int)
insert into #tb
select 1,'语文',89 union all
select 2,'语文',89 union all
select 3,'语文',78 union all
select 1,'数学',78 union all
select 2,'数学',98 union all
select 3,'数学',67 union all
select 1,'英语',89 union all
select 2,'英语',87 union all
select 3,'英语',78select 学号,语文=max(成绩), 数学=max(成绩), 英语=max(成绩)
from #tb
group by 学号学号 语文 数学 英语
----------- ----------- ----------- -----------
1 89 89 89
2 98 98 98
3 78 78 78(3 行受影响)
MAX(CASE WHEN 课程='语文' THEN 成绩 ELSE 0 END) 语文,
MAX(CASE WHEN 课程='数学' THEN 成绩 ELSE 0 END) 数学,
MAX(CASE WHEN 课程='英语' THEN 成绩 ELSE 0 END) 英语
FROM #TB
GROUP BY 学号
pivot(max(成绩) for 课程 in([语文] , [数学] , [英语])) pvt学号 语文 数学 英语
----------- ----------- ----------- -----------
1 89 78 89
2 89 98 87
3 78 67 78(3 row(s) affected)
pivot 正解 不过sql 2000 没有 需要要用 case sum