Как я могу сложить два запроса в новой таблице без подзапросов - PullRequest
1 голос
/ 06 июня 2019

У меня есть два запроса, которые получают суммы двух разных столбцов из двух разных таблиц. Проблема, с которой я сталкиваюсь, заключается в том, что я хочу избежать подзапросов. Есть ли способ получить сумму моих результатов?

Это 1-й запрос:

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      |

Как мне достичь желаемых результатов без подзапроса с объединением?

|--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      |

Спасибо!

Ответы [ 2 ]

4 голосов
/ 06 июня 2019

Предположительно, вы хотите посчитать количество домашних и выездных игр для каждой команды.В 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;
1 голос
/ 06 июня 2019
select t1.TeamID,t1.LASTCOUNT,t2.LASTCOUNT,(t1.LASTCOUNT + t2.LASTCOUNT)
 as Sum from team2 t2  
join team1 t1 on t1.TeamID = t2.TeamID

enter image description here

...