2016-11-26 2 views
0

Я пытаюсь заполнить таблицу LeagueStandings совокупными данными из таблицы MatchResults.Таблица заполнения с агрегированными данными из других Таблица

CREATE TABLE [LeagueStandings] (
    [TeamID] INTEGER NOT NULL PRIMARY KEY 
    ,[GoalsScored] INTEGER NOT NULL 
    ,[WinLoss] INTEGER NOT NULL 
) 
GO 

CREATE TABLE [MatchResults] (
    [MatchID] INTEGER NOT NULL PRIMARY KEY 
    ,[HomeTeamID] INTEGER NOT NULL 
    ,[HomeTeamGoalsScored] INTEGER NOT NULL 
    ,[AwayTeamID] INTEGER NOT NULL 
    ,[AwayTeamGoalsScored] INTEGER NOT NULL 
) 
GO 

Столбец LeagueStandings.GoalsScored должен быть общее количество голов, забитых командой, минус общее количество голов, забитых против команды.

Также столбец LeagueStandings.WinLoss должен быть числом побед за вычетом количества потерь. Победа - это когда команда набирает больше голов, чем соперник. Там никогда не будет ничьей.

Я застрял, потому что та же команда может считаться «домом» и «прочь» для разных матчей, как будет заполняться таблица LeagueStandings.GoalsScored и LeagueStandings.WinLoss?

ответ

0
select TeamID, sum(GoalsScored) as GoalsScored, sum(WinLoss) as Winloss 
from (
    select 
    HomeTeamID as TeamID, 
    HomeTeamGoalsScores as GoalsScored, 
    HomeTeamGoalsScores - AwayTeamGoalsScored as WinLoss 
    from MatchResults 
    union all 
    select 
    AwayTeamID as TeamID, 
    AwayTeamGoalsScores as GoalsScored, 
    AwayTeamGoalsScores - HomeTeamGoalsScored as WinLoss 
    from MatchResults) matches 
group by TeamID 
2

Одним из способов было бы создать два промежуточных результата. В первом случае вы объединяете идентификатор домашней команды, а во втором - идентификатор гостевой команды. Это дает вам два промежуточных результирующих набора с вашими баллами для каждой домашней встречи команд и один для оценки для каждого матча гостей команды. Вы можете суммировать промежуточные результаты обеих таблиц для каждого идентификатора команды и записать ее в таблицу результатов.

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