创建存储过程sp_displayGradeInRow(@sname nchar(10))。
存储过程显示两行信息:“姓名”一行,由@sname和“平均成绩”选择的所有课程名称,@sname的另一行,成绩和平均成绩。 (使用游标获取课程名称和成绩)
好的,针对你的问题,我可以给出以下的SQL代码,用于创建存储过程sp_displayGradeInRow(@sname nchar(10)):
CREATE PROCEDURE sp_displayGradeInRow
(
@sname nchar(10)
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @course_name nvarchar(50), @grade int, @avg_grade float;
DECLARE course_cursor CURSOR FOR
SELECT course_name, grade FROM table_name WHERE student_name = @sname;
SELECT N'姓名', course_name FROM table_name WHERE student_name = @sname GROUP BY course_name WITH ROLLUP;
OPEN course_cursor;
FETCH NEXT FROM course_cursor INTO @course_name, @grade;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @avg_grade = AVG(grade) FROM table_name WHERE course_name = @course_name AND student_name != @sname;
SELECT @sname, @grade, @avg_grade;
FETCH NEXT FROM course_cursor INTO @course_name, @grade;
END
CLOSE course_cursor;
DEALLOCATE course_cursor;
END
该存储过程使用游标来获取课程名称和成绩,并使用ROLLUP选项对结果按课程名称进行分组,同时考虑到你提问中的要求,存储过程还会显示出该学生的平均成绩及其他学生在该门课程中的平均成绩。需要替换代码中的table_name为你所使用的表名。
希望我的回答可以对你有所帮助!