这是一张成绩表(成绩表)
学号   课程    成绩  
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.   

    是sql server 2000还是sql server 2005
      

  2.   

    --> 测试数据: #tb
    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 行受影响)
      

  3.   

    SELECT 学号,
     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 学号
      

  4.   

    select 学号 , [语文] , [数学] , [英语] from #tb  
    pivot(max(成绩) for 课程 in([语文] , [数学] , [英语])) pvt学号          语文          数学          英语
    ----------- ----------- ----------- -----------
    1           89          78          89
    2           89          98          87
    3           78          67          78(3 row(s) affected)
      

  5.   


    pivot 正解 不过sql 2000 没有 需要要用 case sum