SQL:使用 IIF 的 CTE
SQL: CTE using IIF
我要解决的问题:
Write a CTE with a SELECT statement that returns one row for each student that has courses with these columns:
- Students 中的 StudentID 列 table
- 课程中课程单元的总和table
Write a SELECT statement that uses this CTE to return these columns for each student:
- CTE 中的 StudentID 列
- CTE 的课程单元总和
- 指示学生是全日制还是非全日制(提示:要确定学生是全日制,请使用 IIF 函数来测试课程单元的总和是否大于 9。)
- 总学费(提示:要计算学费,请使用 IIF 函数确定学生是全日制还是非全日制。然后,将课程单元的总和乘以学费中的 PerUnitCost 列 table并将其添加到 Tuition table 中的 FullTimeCost 或 PartTimeCost 列。为此,请使用交叉连接来连接 CTE 和 Tution tables。这使得来自 Tuition table 可用于 SELECT 语句。)
我是什么运行:
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, Line 8 Column 'UnitsSummary.StudentID' is
invalid in the select list because it is not contained in either an
aggregate function or the GROUP BY clause.
您不需要再sum(TotalUnits)
。每当您使用聚合函数时,您都必须执行 group by
非聚合字段。尝试以下
SELECT
StudentID,
TotalUnits,
IIF(TotalUnits > 9,'FUlltime','Parttime'),
FullTimeCost + (TotalUnits * PerUnitCost) AS Tuition
FROM UnitsSummary
CROSS JOIN Tuition
我要解决的问题:
Write a CTE with a SELECT statement that returns one row for each student that has courses with these columns:
- Students 中的 StudentID 列 table
- 课程中课程单元的总和table
Write a SELECT statement that uses this CTE to return these columns for each student:
- CTE 中的 StudentID 列
- CTE 的课程单元总和
- 指示学生是全日制还是非全日制(提示:要确定学生是全日制,请使用 IIF 函数来测试课程单元的总和是否大于 9。)
- 总学费(提示:要计算学费,请使用 IIF 函数确定学生是全日制还是非全日制。然后,将课程单元的总和乘以学费中的 PerUnitCost 列 table并将其添加到 Tuition table 中的 FullTimeCost 或 PartTimeCost 列。为此,请使用交叉连接来连接 CTE 和 Tution tables。这使得来自 Tuition table 可用于 SELECT 语句。)
我是什么运行:
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, Line 8 Column 'UnitsSummary.StudentID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
您不需要再sum(TotalUnits)
。每当您使用聚合函数时,您都必须执行 group by
非聚合字段。尝试以下
SELECT
StudentID,
TotalUnits,
IIF(TotalUnits > 9,'FUlltime','Parttime'),
FullTimeCost + (TotalUnits * PerUnitCost) AS Tuition
FROM UnitsSummary
CROSS JOIN Tuition