Группировка и объединение объединенной таблицы. Проблемы

На днях я задал вопрос и получил очень полезную информацию, которая помогла мне зайти так далеко. Однако теперь у меня проблемы с получением данных из таблиц с помощью UNION/GROUP BY.

Следующий код - это то, что я пробовал. Но я не могу найти способ сгруппировать его по Player.

Показывается вот так.

Jono - 3 - 1
Jono - 1 - 1

Когда мне нужно показать вот так

Jono - 4 - 1 

Я только начинаю, поэтому, если есть лучший способ выполнить этот код, скажите мне :)

SELECT [Player],[Played],[Games Won] FROM
(SELECT
p1.displayname AS [Player],
COUNT(p1.displayname) AS [Played],
SUM(IIF(m.player2=m.winner, 1, 0)) AS [Games Won]
FROM ((tblMatch m)
INNER JOIN tblPlayers p1 ON m.player2=p1.id)
WHERE m.season = 3
GROUP BY p1.displayname
UNION ALL
SELECT
p2.displayname AS [Player2],
COUNT(p2.displayname) AS [Played],
SUM(IIF(m.player1=m.winner, 1, 0)) AS [Games Won]
FROM ((tblMatch m)
INNER JOIN tblPlayers p2 ON m.player1=p2.id)
WHERE m.season = 3
GROUP BY p2.displayname)

Мой макет базы данных:

tblPlayers (ID,FirstName,LastName,DisplayName,Handicap,Current)  
tblSeason  (ID,Season)  
tblMatch   (ID,MatchDate,Season,Player1,Player2,Player1Score,Player2Score,Winner)  

И что я действительно хотел бы сделать, так это показать список, в котором имя игрока может быть взято из столбца Player1 или Player2, и подсчитать количество игр, сыгранных этим игроком, и из этих игр подсчитать, сколько раз они выиграли игру.

Спасибо


person Jono Hill    schedule 26.08.2013    source источник


Ответы (1)


Не могли бы вы просто добавить еще одну группу в свой внешний запрос:

SELECT [InnerQueryAlias].[Player], Sum([InnerQueryAlias].[Played]) AS SumOfPlayed, Sum([InnerQueryAlias].[Games Won]) AS [SumOfGames Won]
FROM (SELECT
p1.displayname AS [Player],
COUNT(p1.displayname) AS [Played],
SUM(IIF(m.player2=m.winner, 1, 0)) AS [Games Won]
FROM ((tblMatch m)
INNER JOIN tblPlayers p1 ON m.player2=p1.id)
WHERE m.season = 3
GROUP BY p1.displayname
UNION ALL
SELECT
p2.displayname AS [Player2],
COUNT(p2.displayname) AS [Played],
SUM(IIF(m.player1=m.winner, 1, 0)) AS [Games Won]
FROM ((tblMatch m)
INNER JOIN tblPlayers p2 ON m.player1=p2.id)
WHERE m.season = 3
GROUP BY p2.displayname)  AS [InnerQueryAlias]
GROUP BY [InnerQueryAlias].[Player];
person Brian.D.Myers    schedule 26.08.2013