我现在有一个表
id  name  score  kemu
1   张三   100   语文
1  张三 40    数学
2  张张   20    英语
3 李斯   60   语文我要的效果是 
id name  语文 数学 英语
1  张三  100   40   
2 张张             20
3 李斯   60
写出语句或思路,谢谢了

解决方案 »

  1.   

    sql的?还是web的?对第一个表kemu字段取唯一值,然后新建一张表,涵盖之前的所有唯一值在加上ID,name然后遍历填值呗。
    不知道符不符合lz要求哦
      

  2.   

    行列转换
    http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html?33238if not object_id('Class') is null
        drop table Class
    Go
    Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)
    Insert Class
    select N'张三',N'语文',78 union all
    select N'张三',N'数学',87 union all
    select N'张三',N'英语',82 union all
    select N'张三',N'物理',90 union all
    select N'李四',N'语文',65 union all
    select N'李四',N'数学',77 union all
    select N'李四',N'英语',65 union all
    select N'李四',N'物理',85 
    Go
    --2000方法:
    动态:declare @s nvarchar(4000)
    set @s=''
    Select     @s=@s+','+quotename([Course])+'=max(case when [Course]='+quotename([Course],'''')+' then [Score] else 0 end)'
    from Class group by[Course]
    exec('select [Student]'+@s+' from Class group by [Student]')
    生成静态:select 
        [Student],
        [数学]=max(case when [Course]='数学' then [Score] else 0 end),
        [物理]=max(case when [Course]='物理' then [Score] else 0 end),
        [英语]=max(case when [Course]='英语' then [Score] else 0 end),
        [语文]=max(case when [Course]='语文' then [Score] else 0 end) 
    from 
        Class 
    group by [Student]GO
    动态:declare @s nvarchar(4000)
    Select     @s=isnull(@s+',','')+quotename([Course]) from Class group by[Course]
    exec('select * from Class pivot (max([Score]) for [Course] in('+@s+'))b')生成静态:
    select * 
    from 
        Class 
    pivot 
        (max([Score]) for [Course] in([数学],[物理],[英语],[语文]))b生成格式:
    /*
    Student 数学          物理          英语          语文
    ------- ----------- ----------- ----------- -----------
    李四      77          85          65          65
    张三      87          90          82          78(2 行受影响)
    */
      

  3.   

    学习!! 但是看不懂你写的sql语句
      

  4.   


    declare @sql varchar(8000)  
    set @sql = 'select [id],[name]'  
    select @sql = @sql + ' , max(case [kemu] when ''' + [kemu] + ''' then score else 0 end) [' + [kemu] + ']'  
    from (select distinct [kemu] from t_csdn) as a  
    set @sql = @sql + ' from t_csdn  group by [id],[name] order by [id]'  
    exec(@sql)  
      

  5.   

    学了一招。。pivot和动态的行列转换