我要解决的问题是:
用select语句编写一个cte,该语句为每个有以下列课程的学生返回一行:
学生表中的studentid列
课程表中课程单元的总和
编写一个select语句,使用此cte为每个学生返回以下列:
cte的studentid列
cte课程单元的总和
指示学生是全职还是兼职(提示:要确定学生是全职,请使用iif函数测试课程单元之和是否大于9。)
总学费(提示:要计算学费,请使用iif函数确定学生是全日制还是非全日制。然后,将课程单元之和乘以学费表中的perunitcost列,并将其加到学费表中的fulltimecost或parttimecost列。为此,使用交叉联接来联接cte和tution表。这使得select语句可以使用tutory表中的列。)
我正在运行的内容:
WITH UnitsSummary AS (
SELECT Students.StudentID,SUM(CourseUnits) AS TotalUnits
FROM Students JOIN StudentCourses ON Students.StudentID = StudentCourses.StudentID
JOIN Courses ON StudentCourses.CourseID = Courses.CourseID
GROUP BY Students.StudentID,CourseUnits
)
SELECT StudentID, TotalUnits, IIF( SUM (TotalUnits) >9,'FUlltime','Parttime'),FullTimeCost + (TotalUnits * PerUnitCost) AS Tuition
FROM UnitsSummary CROSS JOIN Tuition
我的错误消息:
msg 8120,level 16,state 1,第8行的“unitssummary.studentid”列在选择列表中无效,因为它不包含在聚合函数或group by子句中。
1条答案
按热度按时间rhfm7lfc1#
你不需要这么做
sum(TotalUnits)
再一次。无论何时使用聚合函数,都必须group by
非聚合字段。请尝试以下操作