我有两个表:

Membership
mID     StartingDate    Name     Address     Gender      EndingDate

Circulation Info
ISBN    mID    DateOfBorrow    DateOfReturn    DateOfLoss

我正在尝试找到每种性别的活动水平,但是到目前为止,我还没有那么幸运。

到目前为止,这是我尝试过的:

SELECT Membership.Gender, [Circulation Info].mID, Membership.mID
FROM [Circulation Info] AS c INNER JOIN Membership AS m ON [Circulation Info].mID = Membership.mID
GROUP BY m.mID
HAVING Membership.Gender='F'

尝试运行此语法时,我收到语法错误,它将我带到第一行的“流通信息”。

===============>>#1 票数:2

原因是您为表设置了别名,但是使用表名作为列名的前缀而不是别名。 尝试这个:

SELECT m.Gender, c.mID, m.mID
FROM [Circulation Info] AS c INNER JOIN Membership AS m ON c.mID = m.mID
GROUP BY m.mID
HAVING m.Gender='F';

===============>>#2 票数:1

您正在为表使用别名,因此请使用别名。

SELECT m.Gender, c.mID, m.mID
FROM [Circulation Info] AS c INNER JOIN Membership AS m ON c.mID = m.mID
GROUP BY m.mID
HAVING m.Gender='F'

===============>>#3 票数:1 已采纳

除了关于表别名的问题(当给表加上别名时,必须使用该别名而不是表名来限定字段名),我认为您还希望Count()函数为您提供“活动级别” 。

另请注意,Access通常会抱怨SELECT子句中的任何字段表达式,该字段表达式不包含在GROUP BY ,也不是聚合表达式( Min()Max()Count()等)。

我不明白为什么在SELECT列表中需要同时使用c.mIDm.mID 每行应该相同。 还可以考虑将标准m.Gender='F'HAVING移到WHERE子句。

SELECT m.mID, Count(*) AS activity_level
FROM
    [Circulation Info] AS c
    INNER JOIN Membership AS m
    ON c.mID = m.mID
WHERE m.Gender='F'
GROUP BY m.mID;

  ask by freeWind translate from so

未解决问题?本站智能推荐: