0

先日、質問をしたところ、ここまでたどり着くのに役立つ非常に役立つ情報を受け取りました。ただし、UNION/GROUP BY を使用してテーブルからデータを取得する際に問題が発生しています。

次のコードは私が試したものです。しかし、プレーヤーごとにグループ化する方法を見つけることができないようです。

このように表示しています。

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 列のいずれかから取得できるリストを表示し、このプレイヤーがプレイしたゲームの数をカウントし、これらのゲームから、ゲームに勝った回数をカウントすることです。

ありがとう

4

1 に答える 1

0

外側のクエリに別のグループを入れてみませんか:

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];
于 2013-08-26T19:19:19.417 に答える