两个表中使用计数和求和的MS访问

时间:2014-10-13 20:07:42

标签: sql ms-access

我有两个表,一个包含有关团队的信息,名为TEAMS,如下所示:

TEAMS

Name|City|Attendance

Jets   NY  50

另一个持有游戏信息,名为GAMES:

GAMES

Home|Visitors|Date|Result

Jets  Broncos  1/1/2012  Tie

我正在尝试设置一个查询,打印GAMES表中列出的月份日期,然后是当天的游戏数量,然后是当天玩游戏的总出勤次数。

现在,我可以创建打印出当月播放日期和当天播放的游戏的查询,但是当我尝试添加当天出席的列时,它根本无法正确显示。这是我目前的查询:

SELECT Day(Date) AS [Day of Week], Count(Day(Date)) AS [Games on Day]
FROM GAMES
GROUP BY Day(Date);

如果我只是将Sum(Attendance)添加到SELECT然后TEAMS添加到FROM,那么出勤编号就会显示出来的总数。 TEAMS次当天比赛的次数。任何有关如何处理此问题的帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

GAMES和TEAM之间需要Inner JOIN,因为您的出席是TEAM的一部分。

SELECT Day(G.Date) AS [Day of Week], Count(Day(G.Date)) AS [Games on Day], Sum(Attendance)
FROM GAMES G
INNER JOIN TEAM T
On G.HOME = T.NAME
GROUP BY Day(Date)

此外,如果您按DAY(Date)进行分组,那么您只需返回一个月的日期(因此,2014年8月12日,您只需获得12)。 2014年8月12日和2015年1月12日同一赛季有比赛时会发生什么?您将在这两个日期中获得总共玩过的游戏。仔细检查以确保这是您真正想要的。

此外,参加游戏可以逐游戏变化。例如,在预测恶劣天气的情况下,您可能没有售罄的人群。我认为您应该将Attendance列移至GAME

修改

回答评论中的问题

SELECT Count(Day(G.Date)) AS [Games on Day], Sum(Attendance)
FROM GAMES G
INNER JOIN TEAM T
    On G.HOME = T.NAME
WHERE G.DATE Between '01/01/2010' and '12/31/2010'
GROUP BY Day(Date)