【问题标题】:Access Update SQL with Sum Error访问更新 SQL 并出现 Sum 错误
【发布时间】:2017-10-11 02:23:24
【问题描述】:

我正在使用 access 作为我的数据库,以尝试对每个学生的 SchoolGrade 科目的测试尝试次数求和。一些基本信息:一个 SchoolGrade 有很多学生,一个学生的测试尝试按科目记录。我想更新每个 SchoolGrade 科目的总测试尝试次数。 以下是我的查询:

UPDATE [SchoolGrade] AS SG
INNER JOIN [Student] AS S ON S.schoolgrade_id = SG.id
SET SG.[Total Reading Test Attempts] = SUM(S.[Reading Test Attempts] ), 
SG.[Total Math Test Attempts] = SUM(S.[Math Test Attempts] ), 
SG.[Total Science Test Attempts] = SUM(S.[ScienceTest Attempts] );

我收到以下错误:

您尝试执行的查询不包含指定的 表达式“Total Reading Test Attempts”作为聚合的一部分 功能。

如何解决这个错误?

【问题讨论】:

    标签: sql ms-access inner-join


    【解决方案1】:

    您需要在执行JOIN 之前进行聚合。我认为这将适用于 MS Access:

    UPDATE SG
        SET [Total Reading Test Attempts] = s.sum_reading, 
            [Total Math Test Attempts] = s.sum_math, 
            [Total Science Test Attempts] = s.sum_science
        FROM [SchoolGrade] AS SG INNER JOIN
             (SELECT s.schoolgrade_id,
                     SUM([Reading Test Attempts]) as sum_reading,
                     SUM([Math Test Attempts]) as sum_math,
                     SUM([Science Test Attempts]) as sum_science
              FROM [Student] AS s
              GROUP BY s.schoolgrade_id
             ) s
             ON S.schoolgrade_id = SG.id
    

    【讨论】:

    • 我收到以下错误:查询表达式中的语法错误(缺少运算符) 's.sum_science FROM [SchoolGrade] AS SG INNER JOIN (SELECT s.schoolgrade_id, SUM([Reading Test Attempts]) as sum_reading, SUM([Math Test Attempts]) as sum_math, SUM([Science Test Attempts]) as sum_science FROM [Student] AS s GROUP BY s.schoolgrade_id ) s ON S.schoolgrade_id = SG.id'。
    • 它缺少 ASs 别名。此外,Access 不会使用 JOINS 对查询执行更新。如果您尝试这样做,它会返回错误“操作必须使用可更新查询”。见Use SELECT inside an UPDATE query
    • C Perkins 创建一个表来更新工作!谢谢!
    【解决方案2】:

    为了完整起见,这里有一组完整的查询,用于执行更新和之后的清理。归功于 Gordon Linoff 的回答和Use SELECT inside an UPDATE query

    创建表:

    SELECT s.schoolgrade_id,
                 SUM([Reading Test Attempts]) as sum_reading,
                 SUM([Math Test Attempts]) as sum_math,
                 SUM([Science Test Attempts]) as sum_science
    INTO TempTable
    FROM [Student] AS s
    GROUP BY s.schoolgrade_id
    

    执行更新:

    UPDATE SG
    SET [Total Reading Test Attempts] = s.sum_reading, 
        [Total Math Test Attempts] = s.sum_math, 
        [Total Science Test Attempts] = s.sum_science
    FROM [SchoolGrade] AS SG INNER JOIN
         TempTable AS s
         ON S.schoolgrade_id = SG.id
    

    清理:

    DROP TABLE TempTable
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-09
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 2020-03-06
      • 2015-01-05
      相关资源
      最近更新 更多