使用其他表

时间:2016-11-26 20:12:05

标签: sql sql-server tsql aggregate-functions

我正在尝试使用MatchResults表中的聚合数据填充LeagueStandings表。

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列需要是胜利数量减去损失数量。胜利是指球队的进球数量超过对手。永远不会有平局。

我被困了,因为可以考虑同一个团队' home'并且'远离'对于不同的比赛,如何填充LeagueStandings.GoalsScored和LeagueStandings.WinLoss表?

2 个答案:

答案 0 :(得分:2)

一种方法是创建两个中间结果。在第一个聚合主队ID,第二个聚合客队ID。这将为您留下两个中间结果集,其中包含每个球队主场比赛的得分以及每个球队客场比赛的得分。您可以为每个团队ID汇总两个表的中间结果,并将其写入结果表。

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