Sql 如何在没有子查询的情况下对新表中的两个查询求和

Sql 如何在没有子查询的情况下对新表中的两个查询求和,sql,sql-server,tsql,sum,subquery,Sql,Sql Server,Tsql,Sum,Subquery,我有两个查询,它们从两个不同的表中获取两个不同列的和。我面临的问题是我想避免子查询。有没有办法得到我的结果的总和 这是第一个问题: SELECT TeamID, Count(HomeTeamID) AS LASTCOUNT1 FROM Games LEFT JOIN Teams as team1 ON Games.HomeTeamID = team1.TeamID GROUP BY TeamID; 这是第二个问题: SELECT TeamID, Count(AwayTeamID) AS LAS

我有两个查询,它们从两个不同的表中获取两个不同列的和。我面临的问题是我想避免子查询。有没有办法得到我的结果的总和

这是第一个问题:

SELECT TeamID, Count(HomeTeamID) AS LASTCOUNT1
FROM Games LEFT JOIN Teams as team1
ON Games.HomeTeamID = team1.TeamID
GROUP BY TeamID;
这是第二个问题:

SELECT TeamID, Count(AwayTeamID) AS LASTCOUNT2
FROM Games LEFT JOIN Teams as team2
ON Games.HomeTeamID = team2.TeamID
GROUP BY TeamID;
结果:

|--TeamID--|--LASTCOUNT1--|
|    1     |       8      |
|    2     |       8      |
|    3     |       8      |
|    4     |       8      |
|    5     |       8      |
|    6     |       8      |
|    7     |       8      |
|    8     |       8      |

|--TeamID--|--LASTCOUNT2--|
|    1     |       8      |
|    2     |       8      |
|    3     |       8      |
|    4     |       8      |
|    5     |       8      |
|    6     |       8      |
|    7     |       8      |
|    8     |       8      |
如果没有带有union的子查询,如何实现所需的结果

|--TeamID--|--LASTCOUNT1--|--LASTCOUNT2--|--TOTALCOUNT--|
|    1     |       8      |       8      |      16      |
|    2     |       8      |       8      |      16      |
|    3     |       8      |       8      |      16      |
|    4     |       8      |       8      |      16      |
|    5     |       8      |       8      |      16      |
|    6     |       8      |       8      |      16      |
|    7     |       8      |       8      |      16      |
|    8     |       8      |       8      |      16      |

谢谢大家!

大概,你要计算每个队的主客场比赛数。在SQL Server中,您可以取消填充数据并聚合:

SELECT v.TeamID, SUM(ishome) as num_homes, SUM(is_away) as num_aways
FROM Teams t CROSS APPLY
     (VALUES (HomeTeamID, 1, 0), (AwayTeamId, 0, 1)
     ) v(TeamId, ishome, isaway)
GROUP BY v.TeamID;

大概,你要计算每个队主客场比赛的数量。在SQL Server中,您可以取消填充数据并聚合:

SELECT v.TeamID, SUM(ishome) as num_homes, SUM(is_away) as num_aways
FROM Teams t CROSS APPLY
     (VALUES (HomeTeamID, 1, 0), (AwayTeamId, 0, 1)
     ) v(TeamId, ishome, isaway)
GROUP BY v.TeamID;


这是一种更为优雅的方式。据我所知,这会将列转换为行,从而执行聚集(忽略空值?)。我之所以这么做,是因为我还需要一个总的游戏,除了客场和主场。更改为正确。这是更优雅的方式。据我所知,这会将列转换为行,从而执行聚集(忽略空值?)。我之所以这么做,是因为我还需要一个总的游戏,除了客场和主场。更改为正确。