create table source(stu varchar(10),course varchar(15), int)
insert into source select 'Joe','English',98 
insert into source select 'Joe','history',78 
insert into source select 'Joe','jisuanji',88 
insert into source select 'Ann','English',69 
insert into source select 'Ann','history',77 
insert into source select 'Ann','jisuanji',59 
go
select a.stu,b. as English,c. as history,d. as jisuanji from
(select distinct stu from source)a left join
(select stu, from source where course='English') b on a.stu=b.stu left join
(select stu, from source where course='history') c on a.stu=c.stu left join
(select stu, from source where course='jisuanji') d on a.stu=d.stugo
drop table source
/*
stu        English     history     jisuanji
---------- ----------- ----------- -----------
Ann        69          77          59
Joe        98          78          88(2 行受影响)
*/

解决方案 »

  1.   


    declare @str varchar(500)
    declare @t table(course varchar(30))
    insert into @t 
    select distinct course
    from source
    set @str =''
    select @str=@str+','+ 'max(case course when '+''''+course+''''
                        +' then  end) as ' +''''+course +''''
    from  @t
    print @strset @str='select stu'+@str+' from source group by stu'
    print @str
    exec(@str)
      

  2.   

    行转列
    http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html
      

  3.   

    --> --> (Andy)生成测试数据 2008-09-07
    Set Nocount On
    if not object_id('source') is null
    drop table source
    Go
    Create table source([stu] nvarchar(3),[course] nvarchar(8),[] int)
    Insert source
    select N'Joe',N'English',98 union all
    select N'Joe',N'history',78 union all
    select N'Joe',N'jisuanji',88 union all
    select N'Ann',N'English',69 union all
    select N'Ann',N'history',77 union all
    select N'Ann',N'jisuanji',59
    GoDeclare @sql nvarchar(4000)
    Select @sql=Isnull(@sql+',','Select * From source Pivot(Max(Mark) For course In(')+Quotename(course)  
    From source
    Group By course
    Exec (@sql+')) p')/*
    stu  English     history     jisuanji
    ---- ----------- ----------- -----------
    Ann  69          77          59
    Joe  98          78          88
    */