Sql 使用来自其他表的聚合数据填充表
我试图用MatchResults表中的聚合数据填充LeagueStandings表Sql 使用来自其他表的聚合数据填充表,sql,sql-server,tsql,aggregate-functions,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 P
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表?一种方法是创建两个中间结果。第一个是主队id,第二个是客队id。这将为您留下两个中间结果集,其中一个是每个队主场比赛的分数,另一个是每个队客队比赛的分数。您可以为每个团队id汇总两个表的中间结果,并将其写入结果表。一种方法是创建两个中间结果。第一个是主队id,第二个是客队id。这将为您留下两个中间结果集,其中一个是每个队主场比赛的分数,另一个是每个队客队比赛的分数。您可以为每个团队id汇总两个表的中间结果,并将其写入结果表
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