2013-08-24 215 views
-2

我不是100%確定如何解釋這個問題。我儘可能地搜索了檔案,但無法找到我想要的東西。來自SQL查詢的多個結果

我有三個數據庫表。

tblSeason(ID,季)

tblPlayers(ID,名字,姓氏,顯示名稱,盤口,電流)

tblMatch(ID,MatchDate,季節,PLAYER1,Player2,Player1Score,Player2Score,優勝者)

我一直在努力解決如何返回如下內容。

PLAYER1

Player2 - 2場對陣

Player3 - 1次對陣

Player2

PLAYER1 - 2場對陣

Player3 - - 3場比賽對陣

感謝

SELECT p4.displayname AS [Opponent], count(*) AS [Games Against] 
FROM ((SELECT player1,player2 FROM tblMatch) 
UNION ALL SELECT player2, player1 FROM tblMatch) m 
INNER JOIN tblPlayers p4 ON m.Player2=p4.id) 
WHERE player1=(SELECT p3.id FROM tblPlayers p3 WHERE p3.displayname=?) 
GROUP BY player1, player2; 

我使用Visual Studio和插入參數爲每次1個玩家完成此查詢。

下面的工作沒有顯示玩家的名字。

SELECT m.Player2 AS [Opponent], count(*) AS [Games Against] 
FROM (SELECT player1,player2 FROM tblMatch 
UNION ALL SELECT player2, player1 FROM tblMatch) m 
WHERE player1=1 
GROUP BY player2; 

感謝您的幫助,指引我朝着正確的方向前進。我最終使用以下方法獲得了我想要的結果。

SELECT p4.displayname AS [Opponent], count(*) AS [Games Against] 
FROM ((SELECT player1, player2 
FROM(tblMatch) 
UNION ALL 
SELECT player2, player1 
FROM tblMatch) m 
INNER JOIN tblPlayers p4 ON m.Player2=p4.id) 
WHERE player1=1 
GROUP BY p4.displayname; 

回答

0

查詢的基本形式是:

select player1, player2, count(*) 
from tblMatch m 
group by player1, player2; 

但是,你真正想要的遊戲報道方式。對於這一點,你可以使用union all

select player1, player2, count(*) 
from (select player1, player2 
     from tblMatch 
     union all 
     select player2, player1 
     from tblMatch 
    ) m 
group by player1, player2; 

如果您想了解玩家的附加信息(如自己的名字),那麼你需要額外的表來參加。

+0

謝謝,這工作正是我需要的。儘管我無法理解在哪裏加入以從玩家表中獲取player2信息。我已經嘗試了以下。 –

+0

查看原文,瞭解更多詳情..謝謝 –

0

您可以在查詢中使用group by。

SELECT id, player, match 
FROM tables 
GROUP BY id, player, match