SQL Server 用于将学生统计信息插入表的SQL查询

d7v8vwbk  于 2023-01-25  发布在  其他
关注(0)|答案(1)|浏览(126)

我想要一些关于如何写一个sql server查询的帮助,以便将学生的每月统计数据插入到表中。
我的月度统计表如下所示:|学生编号|年份|月份|一级|二级|缺席
现在我有了另一个表,其中包含学生详细信息,如学生ID、姓名等。还有多个其他表,其中包含成绩、出席情况等。
我的目标是从StudentDetails中选择所有学生ID,并将它们插入Monthly Stats表,同时从其他多个表中计算Grade1、Grade2和缺勤。
编写这样一个查询的最佳方法是什么?
我是否首先使用select将StudentsIds、Year列和Month列插入到查询中,然后以某种方式迭代插入的每个studentID,并对指定月份和年份的每个studentID运行更新查询(用于计算其余列)?
我只需要一个例子或一些逻辑如何实现这一点。对于插入学生的第一部分,我有这样的:

declare @maindate date = '20230101';

insert into Monthly_Stats (StudentID, Year, Month)
(select StudentID, AllocatedYear, AllocatedMonth
from Students_Allocation
where AllocatedMonth = DATEPART(MONTH, @maindate)
and AllocatedYear = DATEPART(YEAR, @maindate)
and Active = 1)

插入后,我想以某种方式更新每个学生ID的上述月份和年份的多个其他表中的每一个其他列(Grade1、Grade2、Absences ...)。
有什么想法吗?

wn9m85ua

wn9m85ua1#

这是我通常执行的批量更新

UPDATE Monthly_Stats  
SET
       Monthly_Stats.GRADE1 = T1.Somedata + T2.Somedata  + T3.Somedata  
FROM
       Monthly_Stats MS INNER JOIN TABLE_1 as T1        
left join TABLE_2 as T2 on T1.StudentID = T2.StudentID and T1.Year = T2.Year and T1.Month = T2.Month        
left join TABLE_3 as T3 on T1.StudentID = T3.StudentID and T1.Year = T3.Year and T1.Month = T3.Month 
ON 
       MS.StudentID = T1.StudentID and MS.Year = T1.Year and MS.Month = T1.Month;

使用两个左联接时要小心。根据数据库规范化的不同,您可能需要在ON子句中使用更多的条件来确保联接输出符合预期。
希望能有所帮助

相关问题