我按你给我的例子去做了,不过把你给我的代码输入进去,都不能运行呢?请问问题出在哪,我把那3个表都建好了,名字和内容都和你的一样
学生表 student   
sid  Name 
1    li 
2    zhang 
3    wang 课程表 course 
cid    Name 
1   数学 
2   英语 
3   计算机 成绩表 pid sid Grade 
1     1   90 
3     2   78 
1     3   60 
2     2   76 
2     1   80 
3     1   59 
3     3   83 
2     3   46 
1     2   90 
想生成一个表 
学生  数学  英语  计算机 
li    90   90   60 
zhang 80   76   46 
wang  59   78   83 
--静态
select 学生= a.name,
  数学 = sum(case when c.name = '数学' then b.grade else 0 end),
  英语 = sum(case when c.name = '英语' then b.grade else 0 end),
  计算机 = sum(case when c.name = '计算机' then b.grade else 0 end)from student a,成绩表 b, course c
where a.sid = c.sid and b.cid = c.pid
group by a.name然后我运行就提示服务器: 消息 207,级别 16,状态 3,行 1
列名 'sid' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'cid' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'pid' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'sid' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'cid' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'pid' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'sid' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'cid' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'pid' 无效。

解决方案 »

  1.   

    from student a,成绩表 b, course c 
    where a.sid = c.sid and b.cid = c.pid 
    group by a.name 
    -------------------------------------------------------------
    别冤枉人家小梁,你自己写错了。
    你的成绩表的别名是b不是c
    只有b.sid,没有c.sid
    只有c.cid,没有b.cid
      

  2.   

    create table students(sid int,name varchar(20))
    insert students select 1  ,  'li'  
    insert students select 2  ,  'zhang'  
    insert students select 3  ,  'wang'create table course(cid int,name varchar(20))
    insert course select 1  , '数学'  
    insert course select 2  , '英语'  
    insert course select 3  , '计算机'  create table result(pid int,sid int,grade int)
    insert result select 1 ,    1 ,  90  
    insert result select 3 ,    2 ,  78  
    insert result select 1 ,    3 ,  60  
    insert result select 2 ,    2 ,  76  
    insert result select 2 ,    1 ,  80  
    insert result select 3 ,    1 ,  59  
    insert result select 3 ,    3 ,  83  
    insert result select 2 ,    3 ,  46  
    insert result select 1 ,    2 ,  90  select 学生= a.[name], 
      数学 = sum(case when b.[name] = '数学' then c.grade else 0 end), 
      英语 = sum(case when b.[name] = '英语' then c.grade else 0 end), 
      计算机 = sum(case when b.[name] = '计算机' then c.grade else 0 end) from students a,course b, result c 
    where a.sid = c.sid and b.cid = c.pid 
    group by a.[name] drop table students,course,result/*
    学生                   数学          英语          计算机
    -------------------- ----------- ----------- -----------
    li                   90          80          59
    wang                 60          46          83
    zhang                90          76          78(3 行受影响)
    */
      

  3.   

    declare @sql varchar(8000)
    set @sql='select a.name as 学生'
    select @sql=@sql+',max(case when b.name='''+name+''' then c.grade end) as ['+name+']'
    from course group by nameexec (@sql+' from students a,result c,course b where a.sid=c.sid and b.cid=c.pid group by a.name')drop table students,course,result