急求一个sql语句!高手请进!~!~!~!~!~!~!~!~!~!

yuantou520 2005-03-07 11:52:55
假如有三个表
S(Sn,Sname)--学号,姓名
C(Cn,Cname)--课程号,课程名称
SC(Sn,Cn,Crade)--学号,课程号,成绩
我现在要出一个学生各科成绩的显示报表,应该怎么做呢
Sname Total Cname1 Cname2 Cname3 Cname4……

我该用什么SQL语句或存储过程才能实现这个功能呢?
或者利用其他什么工具能帮助实现呢?谢谢
...全文
199 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamzhanglin 2005-04-21
  • 打赏
  • 举报
回复
up
aaronhuang 2005-04-20
  • 打赏
  • 举报
回复
create table s(sn nvarchar(10),sname nvarchar(10))
insert into s select '001','wang'
insert into s select '002','zhang'
insert into s select '003','li'
create table c(cn nvarchar(10),cname nvarchar(10))
insert into c select '1001','y'
insert into c select '1002','s'
insert into c select '1003','w'
create table sc(sn nvarchar(10),cn nvarchar(10),grade int)
insert into sc select '001','1001',100
insert into sc select '001','1002',98
insert into sc select '001','1003',99
insert into sc select '002','1001',90
insert into sc select '002','1002',94
insert into sc select '002','1003',88
insert into sc select '003','1001',70
insert into sc select '003','1002',99
insert into sc select '003','1003',99
go

declare @sql varchar(1000)
set @sql='select s.sname,'
select @sql=@sql+char(13)+'sum(case c.cn when '+c.cn+' then sc.grade else '''' end) as ''' +c.cname+''','
from c
select @sql = left(@sql,len(@sql)-1) + char(13)+ 'from s,c,sc where s.sn=sc.sn and sc.cn=c.cn group by s.sname'
exec(@sql)
go


测试正确
aaronhuang 2005-04-20
  • 打赏
  • 举报
回复
用交叉表的方法
写一个存储过程
yuantou520 2005-04-18
  • 打赏
  • 举报
回复
不行啊,我要动态的增加和删除,所以在报表开发工具不可能实现那么灵活的啊,有没有写过这样的存储过程的啊,给我点代码.我真的想不出该怎么做?
MythColor 2005-04-12
  • 打赏
  • 举报
回复
这是一个典型的交叉报表问题。就是说,报表的列是变量,不确定有多少,也不确定有哪些值,都是根据数据库里的数据而定。遇到这种报表,我劝你还是不要写SQL了吧。单纯的SQL是写不出来的。可以考虑变成实现或者在报表开发工具里实现(比如Crystal Report)。0
jackiess 2005-03-21
  • 打赏
  • 举报
回复
用vc++客户端编程实现。
wlbfeihu 2005-03-20
  • 打赏
  • 举报
回复
这不是课本上的问题吗?
可以连接查询,
lilyzypqq 2005-03-17
  • 打赏
  • 举报
回复
应该先建立个临时表将SC的每位学生的成绩横向显示出来,一个学生一条成绩,再连接另2张表。
这样报表就可以清晰的出来,要不3张表的关联会很大,效率很低的。
sydjik 2005-03-17
  • 打赏
  • 举报
回复
也可以建个临时表
做两次连接
很清晰的
zhangchuancai 2005-03-09
  • 打赏
  • 举报
回复
select s.*,c.*,sc.成绩 from s left join sc on s.学号=sc.学号 left join c on sc.课程号=c.课程号 where ......
woodcord 2005-03-08
  • 打赏
  • 举报
回复
当然是用连结了

6,108

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 数据库报表
社区管理员
  • 数据库报表社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧