假设有张学生成绩表(tb)如下:
Name Subject Result
张三 语文   及格
张三 数学   及格
张三 物理   良好
李四 语文   及格
李四 数学   良好
李四 物理   差改成:
想变成 
姓名         语文        数学        物理          
---------- ----------- ----------- ----------- 
李四         及格         良好         差
张三         及格        及格          良好注意科目不是分数,请高手帮忙!!!!问题解决,立刻结贴

解决方案 »

  1.   

    create table tb
    (
       Name    varchar(10) ,
       Subject varchar(10) ,
       Result  varchar(10)
    )insert into tb(Name , Subject , Result) values('张三' , '语文' , '及格')
    insert into tb(Name , Subject , Result) values('张三' , '数学' , '及格')
    insert into tb(Name , Subject , Result) values('张三' , '物理' , '良好')
    insert into tb(Name , Subject , Result) values('李四' , '语文' , '及格')
    insert into tb(Name , Subject , Result) values('李四' , '数学' , '良好')
    insert into tb(Name , Subject , Result) values('李四' , '物理' , '差')select * from tb
      

  2.   

    用SQL在查询时直接转出来就OK了,SQL 2000的话就动态拼SQL穿,2005以上用透视表函数
    万年的老问题了,搜一大把。不说了
      

  3.   

    请问一下,sql2000的话,拼接字符串怎么写?
      

  4.   

    select name,max(case subject when '语文' then result else '' end ) as 语文,
                max(case subject when '数学' then result else '' end ) as 数学,
                max(case subject when '物理' then result else '' end ) as 物理
    from tb
    group by name
      

  5.   

    在存储过程中用游标运态构造Max后的部分
      

  6.   

    DECLARE @sql nvarchar(4000)
    DECLARE @subject nvarchar(10)SET @sql='select name'DECLARE subject_cursor CURSOR FOR 
    SELECT DISTINCT subject
    FROM tbOPEN subject_cursor
    FETCH NEXT FROM subject_cursor 
    INTO @subject
    WHILE @@FETCH_STATUS = 0
    BEGIN
         set @sql=@sql + ',max(case subject when ''' + @subject + ''' then result else '''' end ) as ' + @subject
         FETCH NEXT FROM subject_cursor 
        INTO @subject
    END
    CLOSE subject_cursor
    DEALLOCATE suject_cursorset @sql = @sql + ' from tb group by name'print @sqlEXEC sp_executesql @sql 
      

  7.   

    你先学会我上面写的那部分,用同样的方式去处理你的问题,我可以给你提示一下,可以先把你的表按你提到的表的格式整理为一个视图(VIEW),然后用我反提到的方法去处理你的视图,否则的话,你只能把库结构发给懂的人,让人给你代劳了我下午要去旅游了,近期无法帮你了,祝你好运!
      

  8.   

    一个Sql的行转列问题。原来写的,现在看不懂了,晕倒~~~~~~~ declare @sql varchar(4000)
    set @sql = 'select EXPENSE_KIND AS 消费方式,SUM(SUM_MONEY) AS 合计'
    select @sql = @sql + ',isnull(sum(case JS_WAY when '''+JS+''' then SUM_MONEY end),0) ['+JS+']'
    from (select JS=
    case 
    WHEN JS_WAY IS NULL THEN '未知'
    WHEN JS_WAY = '' THEN '未知'
    ELSE JS_WAY
    END
     from OPERATION_EXPENSE_BILL  GROUP BY JS_WAY) as a select @sql = @sql+' from OPERATION_EXPENSE_BILL '
      

  9.   

    select name,max(case subject when '语文' then result else '' end ) as 语文,
                max(case subject when '数学' then result else '' end ) as 数学,
                max(case subject when '物理' then result else '' end ) as 物理
    from tb
    group by name