【问题标题】:SQL: CTE using IIFSQL:使用 IIF 的 CTE
【发布时间】:2020-07-05 01:23:41
【问题描述】:

我要解决的问题:

使用 SELECT 语句编写 CTE,该语句为每个具有这些列的课程的学生返回一行:

  • Student 表中的 StudentID 列
  • 课程表中课程单元的总和

编写使用此 CTE 的 SELECT 语句为每个学生返回这些列:

  • CTE 中的 StudentID 列
  • CTE 课程单元的总和
  • 学生是全日制还是非全日制的指示(提示:要确定学生是否是全日制,请使用 IIF 函数测试课程单元的总和是否大于 9。)
  • 总学费(提示:要计算学费,请使用 IIF 函数来确定学生是全日制还是非全日制。然后,将课程单元的总和乘以 Tuition 表中的 PerUnitCost 列,并将其添加到Tuition 表中的 FullTimeCost 或 PartTimeCost 列。为此,请使用交叉连接来连接 CTE 和 Tution 表。这使得 Tuition 表中的列可用于 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

我的错误信息:

消息 8120,级别 16,状态 1,第 8 行列“UnitsSummary.StudentID”为 在选择列表中无效,因为它不包含在 聚合函数或 GROUP BY 子句。

【问题讨论】:

    标签: mysql sql join computer-science iif


    【解决方案1】:

    您无需再次sum(TotalUnits)。每当您使用聚合函数时,您都必须使用 group by 非聚合字段。试试下面的

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      相关资源
      最近更新 更多