我按你给我的例子去做了,不过把你给我的代码输入进去,都不能运行呢?请问问题出在哪,我把那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' 无效。
学生表 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' 无效。
where a.sid = c.sid and b.cid = c.pid
group by a.name
-------------------------------------------------------------
别冤枉人家小梁,你自己写错了。
你的成绩表的别名是b不是c
只有b.sid,没有c.sid
只有c.cid,没有b.cid
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 行受影响)
*/
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