SQL 服务器中临时 table 学生的平均成绩

Average grade of student temporary table in SQL Server

我有一个包含以下 table 的数据库:

我需要表示以下数据:

对于每个学生展示:

Student desc, Course desc, Course grade, Grades average

我需要为学生注册的每门课程执行此操作。

例如:

如果学生 A 注册了课程 B 并且他的成绩是 90 他也注册了 C 课程,他的成绩是 70,我想得到以下 table:

A B 90 80
A C 70 80

重要的是我需要使用具有 SELECT INTO 语法的临时 tables 但我无法弄清楚。

我正在使用 SQL 服务器。

有人知道怎么做吗?

编辑:

我已经这样做了:

select CR_ST_No, ST_Desc, CR_Desc, CR_Grade
into #Grades
from Students_T
left join CoursesRegister_T on CR_ST_NO = ST_No
where CRS_Desc is not null

select *
from #Grades 
drop table #Grades

它给了我 table 除了平均值之外我需要的所有数据。

当我尝试将行 select * 更改为 select *, avg(CR_Grade) 无法执行。

这是 Window 函数的典型用例。您没有提供任何示例数据,我现在无法对其进行测试,但类似的东西应该可以工作:

SELECT s.SDedc, c.CDesc, r.CRGrade, AVG(r.CRGrade) OVER (PARTITION BY s.SNo) AS average_grade 
    FROM Students_T             AS s 
    LEFT JOIN CoursesRegister_T AS r ON r.CR_SNo = s.SNo 
    LEFT JOIN Courses_T         AS c ON r.CR_CNo = c.CNo;

根据您的问题和后续评论,您需要更改 select 语句以包含 group by 子句。

请通读 MSDN SELECT (Transact-SQL) 文章,了解 select 语句的结构,以及每个部分的解释和示例。

您收到错误消息的原因是 AVG 是一个聚合函数,因此要求所有不属于聚合的列都包含在 group by 子句中您的 select 声明。