寻找性别的活动水平

时间:2014-04-20 14:34:18

标签: sql ms-access

我有两张桌子:

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'

当我尝试运行此命令时收到语法错误,它会将我引导到第一行的循环信息。

3 个答案:

答案 0 :(得分: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';

答案 1 :(得分: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'

答案 2 :(得分:1)

除了关于表别名的问题(当你为表别名时,你必须使用该别名而不是表名来限定字段名称),我想你想要一个Count()函数给出你是“活动水平”。

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

我不明白你为什么在c.mID列表中同时需要m.mIDSELECT;它们应该在每一行中相同。另请考虑将标准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;