sql:cte使用iif

quhf5bfb  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(396)

我要解决的问题是:
用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子句中。

rhfm7lfc

rhfm7lfc1#

你不需要这么做 sum(TotalUnits) 再一次。无论何时使用聚合函数,都必须 group by 非聚合字段。请尝试以下操作

SELECT 
    StudentID, 
    TotalUnits, 
    IIF(TotalUnits > 9,'FUlltime','Parttime'),
    FullTimeCost + (TotalUnits * PerUnitCost) AS Tuition
FROM UnitsSummary 
CROSS JOIN Tuition

相关问题