请各位高手帮帮我!

zhouxinjie 2004-09-01 10:43:11
--编写成绩处理的函数,返回表的形式
create function avg_zhou()
returns table
as
return(select ave_chj.stu_num, ave_chj.course_code, ave_chj.course_score=case
when min(ave_chj.course_score)<60 and max(ave_chj.course_score)>60 then 60
else max(ave_chj.course_score) end
from ave_chj,ave_bixiucourse
group by ave_chj.stu_num, ave_bixiucourse.courselike_code
where Charindex(ave_chj.course_code, ave_bixiucourse.courselike_code)>0
)
)
go

总是提示我第五行有语法错误!

怎么修改,大致意思就是将ave_chj存放的是成绩记录,ave_bixiucourse存放的是必修的课程记录.
就是将每个人的必修课程成绩给处理一下.
有重修的记录并且有高于60的记录就取60,否则都是取最高分.
有的同学重修的时候,当年重修的那门课程已经停开啦,需要用另外修另外一课来替代.
ave_chj
stu_num course_code course_name course_score
20011604,"3240600","多媒体技术",81
20011604,"3241400","计算机网络B",44
20011604,"3243043","计算机应用基础B",46
20011604,"3243040","计算机应用基础A",77

ave_bixiucourse
course_name course_likecode
计算机应用基础B 3243043,3243040
多媒体技术 3240600
计算机网络B 3241400


(其中计算机应用基础B可以替代计算机应用基础A)
结果应该是
stu_num course_name course_score
20011604 计算机应用基础B 60
20011604 多媒体技术 81
20011604 计算机网络B 44
...全文
90 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
YaoMing_csdn 2004-09-02
  • 打赏
  • 举报
回复
把 ave_chj.course_code 换成别名,如 A

create function avg_zhou()
returns table
as
return( select ave_chj.stu_num, ave_chj.course_code, A=case
when min(ave_chj.course_score)<60 and max(ave_chj.course_score)>60 then 60
else max(ave_chj.course_score) end
from ave_chj,ave_bixiucourse


group by ave_chj.stu_num, ave_bixiucourse.courselike_code
having charindex(ave_chj.course_code, ave_bixiucourse.courselike_code)>0
)
zhouxinjie 2004-09-01
  • 打赏
  • 举报
回复
提示错误:
ave_chj.course_code在选择列表中无效,既不包含在聚合函数中,也不包含在group by语句中

ave_chj.course_code在HAVING语句中无效,既不包含在聚合函数中,也不包含在group by语句中

再帮帮我啊!
YaoMing_csdn 2004-09-01
  • 打赏
  • 举报
回复
几点说明:
1、Case语句只能用别名来“=”,不可以ave_chj.course_score=case when ...

2、用Group的SQL查询,过滤条件最后不能用WHERE,要用Having;或者把where放在group前面

3、多了一个“)”
YaoMing_csdn 2004-09-01
  • 打赏
  • 举报
回复
create function avg_zhou()
returns table
as
return( select ave_chj.stu_num, ave_chj.course_code, ave_chjcourse_score=case
when min(ave_chj.course_score)<60 and max(ave_chj.course_score)>60 then 60
else max(ave_chj.course_score) end
from ave_chj,ave_bixiucourse


group by ave_chj.stu_num, ave_bixiucourse.courselike_code
having charindex(ave_chj.course_code, ave_bixiucourse.courselike_code)>0
)

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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