2014-10-13 2 views
0

У меня есть две таблицы, один из которых держит информацию о командах, названных команд, выглядит следующим образом:MS Access Использование графов и Sum в двух таблицах

TEAMS 

Name|City|Attendance 

Jets NY 50 

И т.д.

, а другой, который держит Информация о играх, названные игры:

GAMES 

Home|Visitors|Date|Result 

Jets Broncos 1/1/2012 Tie 

Etc.

Я пытаюсь создать запрос, печатает день месяца, указанный в таблице 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 раз количество игр играл в этот день. Любая помощь в том, как подойти к этому, будет оценена, спасибо!

+0

не должны посещаемость быть атрибутом GAME, а не атрибут КОМАНДЫ? –

+0

Столбцы не меняются, они заданы профессором, но я не согласен с вами. – user3587186

ответ

0

Вам нужны Inner JOIN между ИГРЫМИ И КОМАНДАМИ, так как ваша посещаемость является частью КОМАНДЫ.

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), вы только получаете день месяца назад (так что для 12 авг 2014, вы просто получите 12). Что происходит, когда есть игры 12 августа 2014 года и 12 января 2015 года в том же сезоне? Вы получите в общей сложности игры, сыгранные за обе эти даты. Двойная проверка, чтобы убедиться, что это то, что вы действительно хотите.

Кроме того, участие в игре может варьироваться в зависимости от игры. Например, с предсказанной ненастной погодой, у вас может не быть распроданной толпы. Я думаю, вы должны переместить свой столбец Attendance в GAME.

EDIT

Чтобы ответить на этот вопрос в комментариях

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) 
+0

спасибо raj, что работает. Я новичок в sql и, следовательно, не очень хорош со всеми командами и забыл о соединении. переменные, такие как погода, реалистичны в жизни, но это просто простая база данных, спасибо. – user3587186

+0

Итак, теперь я понимаю, как это сделать для единичных сущностей, однако, если бы я хотел сделать тот же запрос, но теперь проверяйте, играют ли игры и посещаемость в конкретный месяц и год, как бы я это сделал? Пример: найти игры и участие в январе 2010 года по декабрь 2010 года. Должен ли я использовать представление? – user3587186

Смежные вопросы