Sql server SQL Server中的SUM存在问题
我有三个表Sql server SQL Server中的SUM存在问题,sql-server,select,sum,Sql Server,Select,Sum,我有三个表Match\u Event,Team\u Detail和Match\u Schedule Match\u计划有列MatchId,Hometeam\u Id,客场团队Id: matchId HTeam Ateam ---------------------- 123 -1 -7 231 -3 -5 Match_事件包含与该匹配相关的内容。(监禁、犯规等) 最后一个表(TeamDetail) 我试过这个 SELECT
Match\u Event
,Team\u Detail
和Match\u Schedule
Match\u计划
有列MatchId
,Hometeam\u Id
,客场团队Id
:
matchId HTeam Ateam
----------------------
123 -1 -7
231 -3 -5
Match_事件
包含与该匹配相关的内容。(监禁、犯规等)
最后一个表(TeamDetail
)
我试过这个
SELECT
Team_Detail.Team_Name,
SUM(CASE WHEN Team_Detail.Serno = Match_Events.Team_Id THEN 1 ELSE 0 END) AS HomeTeamScore,
Team_Detail.Team_Name,
SUM(CASE WHEN Team_Detail.Serno = Match_Events.Team_Id THEN 1 ELSE 0 END) AS AwayTeamScore
FROM
Match_Schedule
INNER JOIN
Match_Events ON Match_Schedule.Match_Serno = Match_Events.Match_ID
INNER JOIN
Team_Detail ON Match_Events.Team_Id = Team_Detail.Serno
GROUP BY
Team_Name, Team_Name
我得到了正确的结果,但是一个在另一个之上,而不是在同一条线上
谁能帮帮我吗
谢谢这里缺少一些信息-我在查询中看到您引用了名为Serno的列,但在上面的表定义中没有指定它们 在您的示例数据中,它看起来似乎还混合了matchID和TeamID(我看到了ID为123和231的比赛和球队) 我想你可能想两次加入球队细节表。一旦表格化名为HomeTeam(或类似名称),并且仅针对主队加入Match_时间表 客队也是如此 大概是这样的:
SELECT HomeTeam.Team_Name AS HomeTeamName, AwayTeam.Team_Name AS AwayTeamName,
SUM(CASE WHEN HomeTeam.TeamID = Match_Events.TeamId THEN Score ELSE 0 END) AS HomeTeamScore,
SUM(CASE WHEN AwayTeam.TeamID = Match_Events.TeamId THEN Score ELSE 0 END) AS AwayTeamScore
FROM Match_Schedule
JOIN Match_Events ON Match_Events.MatchID = Match_Schedule.MatchID
JOIN Team_Detail AS HomeTeam ON HomeTeam.TeamID = Match_Schedule.HTeam
JOIN Team_Detail AS AwayTeam ON AwayTeam.TeamID = Match_Schedule.ATeam
GROUP BY HomeTeam.Team_Name, AwayTeam.Team_Name
此外,我认为你应该根据分数求和,而不是硬编码的1值。。。。除非一个队的得分总是1(可能表示获胜)。如果你想让一场比赛的信息出现在一行上,那么你应该通过
MatchId
进行聚合。然后使用条件聚合来获取您要查找的信息
SELECT max(case when ms.hteam = td.TeamId then Team_Detail.Team_Name end) as hometeam,
SUM(CASE WHEN ms.hteam = td.TeamId THEN me.score ELSE 0 END) AS HomeTeamScore,
max(case when ms.ateam = td.TeamId then Team_Detail.Team_Name end) as awayteam,
SUM(CASE WHEN ms.hteam = td.TeamId THEN me.score ELSE 0 END) AS AwayTeamScore
FROM Match_Schedule ms INNER JOIN
Match_Events me
ON ms.matchId = me.matchID INNER JOIN
Team_Detail td
ON me.teamId = td.teamId
GROUP BY ms.matchid;
注意其他一些事情。我将查询更改为使用基于问题中的描述的字段,而不是查询中的示例。我还更新了计算以使用得分
字段,而不仅仅是计数1
SELECT HomeTeam.Team_Name AS HomeTeamName, AwayTeam.Team_Name AS AwayTeamName,
SUM(CASE WHEN HomeTeam.TeamID = Match_Events.TeamId THEN Score ELSE 0 END) AS HomeTeamScore,
SUM(CASE WHEN AwayTeam.TeamID = Match_Events.TeamId THEN Score ELSE 0 END) AS AwayTeamScore
FROM Match_Schedule
JOIN Match_Events ON Match_Events.MatchID = Match_Schedule.MatchID
JOIN Team_Detail AS HomeTeam ON HomeTeam.TeamID = Match_Schedule.HTeam
JOIN Team_Detail AS AwayTeam ON AwayTeam.TeamID = Match_Schedule.ATeam
GROUP BY HomeTeam.Team_Name, AwayTeam.Team_Name
SELECT max(case when ms.hteam = td.TeamId then Team_Detail.Team_Name end) as hometeam,
SUM(CASE WHEN ms.hteam = td.TeamId THEN me.score ELSE 0 END) AS HomeTeamScore,
max(case when ms.ateam = td.TeamId then Team_Detail.Team_Name end) as awayteam,
SUM(CASE WHEN ms.hteam = td.TeamId THEN me.score ELSE 0 END) AS AwayTeamScore
FROM Match_Schedule ms INNER JOIN
Match_Events me
ON ms.matchId = me.matchID INNER JOIN
Team_Detail td
ON me.teamId = td.teamId
GROUP BY ms.matchid;