表Score内容如下:
StudentID    ScoreType   Score
001          语文        85   
001          数学        80
001          英语        80
002          语文        75   
002          数学        70
002          英语        70
......想通过一条SQL语句产生下来结果:
StudentID    语文成绩   数学成绩  英语成绩
001          85         80        80
002          75         70        70
        
请问SQL怎么写?

解决方案 »

  1.   

    --如果ScoreType是固定的
    Select 
    StudentID,
    SUM(Case ScoreType When N'语文' Then Score Else 0 End) As 语文成绩,
    SUM(Case ScoreType When N'数学' Then Score Else 0 End) As 数学成绩,
    SUM(Case ScoreType When N'英语' Then Score Else 0 End) As 英语成绩
    From
    Score
    Group By StudentID
    --如果ScoreType不是固定的
    Declare @S Nvarchar(4000)
    Select @S = 'Select  StudentID'
    Select @S = @S + N', SUM(Case ScoreType When N'''+ ScoreType +''' Then Score Else 0 End) As '+ ScoreType + N'成绩'
    From Score Group By ScoreType
    Select @S = @S + ' From Score Group By StudentID'
    EXEC(@S)
      

  2.   

    declare @sql varchar(4000)
    set @sql = 'select Name as ' + '姓名'
    select @sql = @sql + ' , sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
    from (select distinct Subject from rowtocol) as a
    set @sql = @sql + ' from rowtocol group by name'
    exec(@sql
      

  3.   

    create table Score 
    (
     StudentID varchar(10),
     ScoreType varchar(10),
    Score int
    )insert into Score values('001','语文',85)
    insert into Score values('001','数学',80)
    insert into Score values('001','英语',85)
    insert into Score values('002','语文',75)
    insert into Score values('002','数学',75)
    insert into Score values('002','英语',70)
    declare @sql varchar(8000)
    set @sql='select StudentID'
    select @sql=@sql+',sum(case when ScoreType='''+ScoreType+''' then Score else 0 end ) as'  +ScoreType from Score group by ScoreType
    set @sql=@sql+ ' from Score group by StudentID'
    exec(@sql)
    ===========================
    001 80 85 85
    002 75 70 75
      

  4.   

    我要的是一条SQL语句
    to:paoluo(一天到晚游泳的鱼)  高手!!!!!!
      

  5.   

    普通行列转换假设有张学生成绩表(t)如下Name Subject Result
    张三 语文  73
    张三 数学  83
    张三 物理  93
    李四 语文  74
    李四 数学  84
    李四 物理  94想变成 
    姓名 语文 数学 物理
    张三 73  83  93
    李四 74  84  94create table #t
    (
       Name    varchar(10) ,
       Subject varchar(10) ,
       Result  int
    )insert into #t(Name , Subject , Result) values('张三','语文','73')
    insert into #t(Name , Subject , Result) values('张三','数学','83')
    insert into #t(Name , Subject , Result) values('张三','物理','93')
    insert into #t(Name , Subject , Result) values('李四','语文','74')
    insert into #t(Name , Subject , Result) values('李四','数学','83')
    insert into #t(Name , Subject , Result) values('李四','物理','93')declare @sql varchar(8000)
    set @sql = 'select Name as ' + '姓名'
    select @sql = @sql + ' , sum(case Subject when ''' + Subject + ''' then Result end) [' + Subject + ']'
    from (select distinct Subject from #t) as a
    set @sql = @sql + ' from #t group by name'
    exec(@sql) drop table #t--结果
    姓名       数学        物理        语文          
    ---------- ----------- ----------- ----------- 
    李四       83          93          74
    张三       83          93          73
     
    ----------------------------------------------------
    如果上述两表互相换一下:即姓名 语文 数学 物理
    张三 73  83  93
    李四 74  84  94想变成 
    Name Subject Result
    张三 语文  73
    张三 数学  83
    张三 物理  93
    李四 语文  74
    李四 数学  84
    李四 物理  94create table #t
    (
       姓名 varchar(10) ,
       语文 int ,
       数学 int ,
       物理 int
    )insert into #t(姓名 , 语文 , 数学 , 物理) values('张三',73,83,93)
    insert into #t(姓名 , 语文 , 数学 , 物理) values('李四',74,84,94)select 姓名 as Name,'语文' as Subject,语文 as Result from #t union
    select 姓名 as Name,'数学' as Subject,数学 as Result from #t union
    select 姓名 as Name,'物理' as Subject,物理 as Result from #t
    order by 姓名 desc drop table #t
     
    --结果
    Name       Subject Result      
    ---------- ------- ----------- 
    张三       数学    83
    张三       物理    93
    张三       语文    73
    李四       数学    84
    李四       物理    94
    李四       语文    74(所影响的行数为 6 行)