例如  全部记录以下
名字      科目         分数
1         语文          90
1         数学          80
2         语文          90
2         数学          85
2         外语          70.............
其中科目只有 语文 数学 外语
 比如1 没有外语分数记录   设置 100 分转化为表格
名字   语文   数学   外语     总分
1      90       80    100      270
2     90        85    70      245.......
谢谢 

解决方案 »

  1.   

    select 名字,语文=isnull(max(case when 科目='语文' then 分数 end),100),数学=isnull(max(case when 科目='数学' then 分数 end),100),外语=isnull(max(case when 科目='外语' then 分数 end),100),总分=sum(isnull(分数,100)) from table group by 名字
      

  2.   

    create table T(名字 varchar(10), 科目 varchar(10), 分数 int)
    insert T select '1',         '语文',          90
    union all select '1',         '数学',          80
    union all select '2',         '语文',          90
    union all select '2',         '数学',          85
    union all select '2',         '外语',          70declare @sql varchar(8000)
    set @sql='select 名字,'
    select @sql=@sql+quotename(科目)+'=isnull( max(case when 科目='+quotename(科目, '''')+' then 分数 end), 100),'
    from T
    group by 科目
    select @sql=left(@sql, len(@sql)-1), 
      @sql=@sql+' from T group by 名字'
    exec(@sql)--result
    名字         数学          外语          语文          
    ---------- ----------- ----------- ----------- 
    1          80          100         90
    2          85          70          90
      

  3.   

    create table #(名字 int,     科目 varchar(20),        分数 int)
    insert into # select 1  ,       '语文'     ,     90 union all
    select 1     ,    '数学'    ,      80  union all
    select 2     ,    '语文'   ,       90  union all
    select 2     ,    '数学'    ,      85  union all
    select 2     ,    '外语'    ,      70select 
    t.名字,
    语文=isnull(max(case when t.科目='语文' then 分数 end),100),
    数学=isnull(max(case when t.科目='数学' then 分数 end),100),
    外语=isnull(max(case when t.科目='外语' then 分数 end),100),总分=sum(isnull(分数,100)) 
    from 
    # a 
    right join 
    (select * 
    from ((select distinct 科目 from #)t1  
    cross join (select distinct 名字 from #) t2)) t 
    on t.名字=a.名字 and t.科目=a.科目 
    group by t.名字--res
    1 90 80 100 270
    2 90 85 70 245
      

  4.   

    marco08(天道酬勤) ( ) 信誉:100    Blog   
     你的有点小问题
     你的是还要据科目分组   但如果记录里面没有一个 "外语"的记录  那么所有外语 都为空了
     jacobsan(梅) 你的很好 谢谢 正在在学习中~~~
      

  5.   

    create table T(名字 varchar(10), 科目 varchar(10), 分数 int)
    insert T select '1',         '语文',          90
    union all select '1',         '数学',          80
    union all select '2',         '语文',          90
    union all select '2',         '数学',          85
    union all select '2',         '外语',          70declare @sql varchar(8000)
    declare @sql2 varchar(1000)
    set @sql=''
    set @sql2='總分='
    select @sql=@sql+quotename(科目)+'=isnull( max(case when 科目='+quotename(科目, '''')+' then 分数 end), 100),',
      @sql2=@sql2+'tmp.'+科目+'+'
    from T
    group by 科目
    select 
      @sql2=left(@sql2, len(@sql2)-1),   
      @sql=left(@sql, len(@sql)-1),   
      @sql='select tmp.*,'+@sql2+' from (select 名字,'+@sql,
      @sql=@sql+' from T group by 名字) tmp'
    exec(@sql)--result
    名字         数学          外语          语文          總分          
    ---------- ----------- ----------- ----------- ----------- 
    1          80          100         90          270
    2          85          70          90          245
      

  6.   

    类似的问题这么多人问,回的都会烦。我遇到时都是听CSDN的先查历史问题再提问的...