0

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

  • Students_T(SNo、SDedc、SA 地址)
  • Courses_T(CNo, CDesc)
  • CoursesRegister_T(CRNo、CR_CNo、CR_SNo、CRGrade)

我需要表示以下数据:

对于每个学生表演:

Student desc, Course desc, Course grade, Grades average

我需要为学生注册的每门课程都这样做。

例如:

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

A B 90 80
A C 70 80

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

我正在使用 SQL Server。

有人知道该怎么做吗?

编辑:

我已经这样做了:

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

它给了我一个表格,里面有我需要的所有数据,除了平均值。

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

4

2 回答 2

0

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

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;
于 2015-05-04T10:39:53.517 回答
0

从您的问题和随后的评论中,您需要更改您的选择语句以包含一个group by子句。

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

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

于 2015-05-04T10:40:01.777 回答