请你看清楚,再回复,这里没有成绩的问题,其实就是一个课程表的问题。原表bjkm:
bj       km    xm
高三(1) 语文 张三
高三(1) 数学 李四
高三(2) 语文  张三
高三(2) 数学 李四
高三(3) 语文 王五
高三(3) 数学 赵六
高三(4) 语文  王五
高三(4) 数学 赵六转变成列如下:
班级   语文   数学
高三(1)  张三     李四
高三(2)  张三     李四
高三(3)  王五     赵六
高三(4)  王五    赵六我用的语句如下:
SELECT bj as 班级, 
      MAX(CASE km WHEN '语文' THEN xm END) AS 语文, 
      MAX(CASE km WHEN '数学' THEN xm END) AS 数学
FROM bjkm 
GROUP BY bj查出来的结果:姓名都是null,并不是任课教师

解决方案 »

  1.   


    班级    语文   数学   
    ----- ---- ---- 
    高三(1) 张三   李四
    高三(2) 张三   李四
    高三(3) 王五   赵六
    高三(4) 王五   赵六(所影响的行数为 4 行)----------------------论坛签名--------------------------yp:你好!
    截至 2011-04-09 17:14:37 前:
    你已发帖 26 个, 未结贴 2 个;结贴率为: 92.31%

    当您的问题得到解答后请及时结贴:
    进入>>>>>>
      

  2.   

    ------------------------------------
    -- Author: stone 
    -- Version:V1.001  
    -- Date:2011-04-09 17:28:54
    ------------------------------------
    -- Test Data: ta
    If object_id('ta') is not null 
        Drop table ta
    Go
    Create table ta(bj nvarchar(5),km nvarchar(2),xm nvarchar(2))
    Go
    Insert into ta
     select '高三(1)','语文','张三' union all
     select '高三(1)','数学','李四' union all
     select '高三(2)','语文','张三' union all
     select '高三(2)','数学','李四' union all
     select '高三(3)','语文','王五' union all
     select '高三(3)','数学','赵六' union all
     select '高三(4)','语文','王五' union all
     select '高三(4)','数学','赵六' 
    Go
    Go
    --Start
    SELECT bj as 班级,  
      MAX(CASE km WHEN '语文' THEN xm END) AS 语文,  
      MAX(CASE km WHEN '数学' THEN xm END) AS 数学
    FROM ta  
    GROUP BY bj
    --Result:
    /*班级    语文   数学   
    ----- ---- ---- 
    高三(1) 张三   李四
    高三(2) 张三   李四
    高三(3) 王五   赵六
    高三(4) 王五   赵六(所影响的行数为 4 行)
    */
    --End 
      

  3.   

    create table bjkm(bj nvarchar(5),km nvarchar(2),xm nvarchar(2))
    Go
    Insert into bjkm
     select '高三(1)','语文','张三' union all
     select '高三(1)','数学','李四' union all
     select '高三(2)','语文','张三' union all
     select '高三(2)','数学','李四' union all
     select '高三(3)','语文','王五' union all
     select '高三(3)','数学','赵六' union all
     select '高三(4)','语文','王五' union all
     select '高三(4)','数学','赵六'  
    go
    select bj,
    语文=max(case when km='语文' then xm else '' end),
    数学=max(case when km='数学' then xm else '' end)
    from bjkm
    group by bj
    --多门课程动态:
    declare @s nvarchar(4000)
    set @s=''
    Select @s=@s+','+quotename(km)+'=max(case when km='+quotename(km,'''')+' then xm else '''' end)'
    from bjkm group by km
    exec('select bj'+@s+' from bjkm group by bj')
    go 
    drop table bjkm
    /*
    bj    语文   数学
    ----- ---- ----
    高三(1) 张三   李四
    高三(2) 张三   李四
    高三(3) 王五   赵六
    高三(4) 王五   赵六(4 行受影响)
    */
      

  4.   

    你的语句没错吧!!!!Create table ta(bj nvarchar(5),km nvarchar(2),xm nvarchar(2))
    Go
    Insert into ta
     select '高三(1)','语文','张三' union all
     select '高三(1)','数学','李四' union all
     select '高三(2)','语文','张三' union all
     select '高三(2)','数学','李四' union all
     select '高三(3)','语文','王五' union all
     select '高三(3)','数学','赵六' union all
     select '高三(4)','语文','王五' union all
     select '高三(4)','数学','赵六'  
    Goselect * from taSELECT bj as 班级,  
      MAX(CASE km WHEN '语文' THEN xm END) AS 语文,  
      MAX(CASE km WHEN '数学' THEN xm END) AS 数学
    FROM ta  
    GROUP BY bj
    /*高三(1) 张三 李四
    高三(2) 张三 李四
    高三(3) 王五 赵六
    高三(4) 王五 赵六*/
      

  5.   


    --mei wei ti
    /*
    高三(1) 张三 李四
    高三(2) 张三 李四
    高三(3) 王五 赵六
    高三(4) 王五 赵六
    */
      

  6.   

    那是怎么回事啊。我的是sql server2000,你们是什么版本?
      

  7.   

    我的是sql server2000专业版,你们是什么版本?
      

  8.   


    请问:你是sqlserver2000的那个版本啊
      

  9.   

    select @@version
    /*
    Microsoft SQL Server  2000 - 8.00.2039 (Intel X86)   May  3 2005 23:18:38   Copyright (c) 1988-2003 Microsoft Corporation  Personal Edition on Windows NT 5.1 (Build 2600: Service Pack 2) 
    */