我在 MS Access 中有一个表,其中包含以下字段/数据:
学号 传统形式 对练 传统武器 格斗武器 -------------- ------------------ -------------- ----- -------------- -------------- 2598 第3286章第二名没有参加第二名 1642 参赛者 未参赛 第三名未参赛 1642 第三届第三届第二届比赛 3116 第1第1第1 第2598章 获得第二名,没有获得第三名 2396 未参赛 已参赛 未参赛 已参赛 第3286章 比赛第三名 3116 第1第1第1 3169 没参加 没参加 参加了 参加了
我有一个查询,它将按学校计算单个条目,如下所示:
SELECT [tourney report].[School Number], COUNT([School Number]) as Entries
FROM [tourney report]
WHERE (Sparring IN ('1st','2nd','3rd','Competed') OR [Traditional Forms] IN ('1st','2nd','3rd','Competed') )
GROUP BY [School Number]
这给了我每所学校的陪练或表格中的条目总数。我可以对其他每个类别(武器/战斗武器)重复这一点。我想要得到的是一个组合查询,显示每所学校的总条目数,这是每种形式/陪练(形式和陪练算作一个实体)、武器、战斗总数的总和。例子:
School number Forms/Sparring Weapons Combat Total Entries
1234 22 15 20 57
我的进一步尝试导致将以下查询放在一起,这为我提供了我需要的大部分内容:
SELECT [tourney report].[School Number],
SUM( IIF( ([tourney report].[Traditional Forms] = "Did Not Compete" OR LEN([tourney report].[Traditional Forms]) = 0) AND ([tourney report].[Sparring] = "Did Not Compete" OR LEN([tourney report].[Sparring]) = 0) , 0, 1) ) AS [Total Form and Sparring],
SUM( IIF( ([tourney report].[Traditional Weapons] = "Did Not Compete" OR LEN([tourney report].[Traditional Weapons]) = 0), 0, 1) ) AS [Total Weapons],
SUM( IIF( ([tourney report].[Combat Weapons] = "Did Not Compete" OR LEN([tourney report].[Combat Weapons]) = 0), 0, 1) ) AS [Total Combat]
FROM [tourney report]
GROUP BY [School Number]
这为我提供了我想要的每个类别的总计,但不是总计。我尝试了以下内容:
SUM( [Total Form and Sparring] + [Total Weapons] + [Total Combat]) as [All Entries]
然而,这给出了错误
表达式中不能使用子查询 (SUM( [Total Form and Sparring] + [Total Weapons] + [Total Combat]) as [All Entries])
如何将所有总和列的总和作为第四个总和?
我不确定 Access 是否支持这个,但通常 SQL 允许您在派生表的帮助下解决这个问题。如果您将当前查询用作派生表,则可以通过它们的别名简单地引用它公开的所有计算列,如下所示:
您可以看到聚合结果都作为它们自己的列返回,并用于创建另一个计算列,即所有条目的总和。
如您所见,对于上述查询,我还冒昧地稍微重写了您的条件。我只是想让它们更紧凑。但是,我再次不确定 Access 是否会接受该语法。如果没有,您可以随时将语法恢复为您的语法。