2012-12-05 3 views
1

지금까지 결과를 얻으려고 많은 노력을 기울였습니다. 이제 막혔습니다. 이 온라인 사례를 찾기가 어려웠습니다.고유 ID로 연결된 열의 개수 결과 SQL

Name | Results 
John | Win 
John | Loss 
John | Tie 
Jim | Win 
Jim | Win 

이 테이블은 다른 게임에서 파생, 각각의 행은 기본적으로 플레이어가 게임을 결과를 나타내며, 각 게임부터 게임마다 두 행이 있어야한다 :

I는 다음과 같이 본질적으로 테이블이 2 명의 선수가있다.

어쨌든 이처럼 몇 가지 결과를 얻고 싶습니다. 카운트를 사용하여 모든 종류의 이상한 것을 시도했지만 정확한 수의 고유 한 이름을 얻는 데 어려움을 겪고 있습니다. 여기에 내가 좋아하는 것이 무엇 :

NAME | games_won | games_lost | games_tied 
John |  1  |  1  |  1 
Jim |  2  |  0  |  0 

을 그리고 보조 노트로, 여기에 내가 첫 번째 테이블을 얻기 위해 마련 한 매우 지저분한 SQL 문이다, 나는 현재 그것은 또한 같은 게임 ID를 제공 한 제외 이 : 당신이 좋은 웃음 가입 인 경우

name | game_id | result 

만 여기에 읽기, 나는이 일을 훨씬 간단한 방법이 99 % 확신하지만 여기 내 질문을 기억하는 방법에 대한 아니다 아래에 작성한 내용을 개선하기 위해 결과와 관련하여 수행해야 할 작업에 대해 설명합니다.

SELECT name, game_id, 
    case 
     when p1_score>p2_score then 'win' 
     when p1_score<p2_score then 'loss' 
     else 'tie' 
    end as result 
from player 
Inner JOIN game on player.player_id = game.p1_id 

union select * from (SELECT name, game_id, 
    case 
     when p1_score>p2_score then 'win' 
     when p1_score<p2_score then 'loss' 
     else 'tie' 
    end as result 
from player 
Inner JOIN game on player.player_id = game.p2_id) as ta 
+0

액세스 또는 웹 사이트에서이 프로그램을 출력하려고합니까? 귀하의 구조에서 나는 액세스 질의에 기대고 있습니다. –

+0

@MichaelGarrison 본질적으로 C#에서 html 테이블을 작성하기 위해이 결과를 사용하고 있습니다. – mrfreester

+0

올바른 C# 구문을 모르지만 어떻게 할 것인지 일반적인 생각을 줄 수 있습니다. –

답변

3
SELECT p.name, 
    sum(case when p.player_id = g.p1_id and g.p1_score>g.p2_score 
     or p.player_id = g.p2_id and g.p1_score<g.p2_score then 1 else 0 end) games_won, 
    sum(case when p.player_id = g.p1_id and g.p1_score<g.p2_score 
     or p.player_id = g.p2_id and g.p1_score>g.p2_score then 1 else 0 end) games_lost, 
    sum(case when g.p1_score=g.p2_score then 1 else 0 end) games_tied 
from player p 
inner JOIN game g on p.player_id in (g.p1_id, g.p2_id) 
group by p.name 
+0

이것은 내가 바라는 모든 것처럼 보이고, 내게 그걸 줄 게다. – mrfreester

+0

내 대답을 단순화하는 것뿐만 아니라 큰 대답을 주셔서 감사합니다. p.player_id (g.p1_id, g.p2_id)의 간단한 내용은 내 프로젝트로 전진하는 생명의 은인이 될 것입니다. 네가 할 수 있다는 것을 나는 몰랐다. 당신의 솔루션은 훌륭하게 작동했습니다. – mrfreester