2012-06-27 3 views
4

Betfair에서 다운로드 할 수있는 기록 데이터의 CSV 파일에서 가져온 골프 일치 목록이 있습니다. 그들은 다음과 같이 : 이벤트 이름이 바로 대전에있는 선수 중 하나입니다쿼리 데이터가 변경되지 않는 행 선택

event   selection_a selection_b 
S. Garcia  Garcia  Woods 
S. Garcia  Woods  Garcia 
P. Mickelson Mickelson Donald 
P. Mickelson Donald  Mickelson 
E. Els  McIlroy  Els 
E. Els  Els   McIlroy 

는 결론적으로 :

event   selection 
S. Garcia  Garcia 
S. Garcia  Woods 
P. Mickelson Mickelson 
P. Mickelson Donald 
E. Els  McIlroy 
E. Els  Els 

나는 다음과 같은 출력을 제공하는 쿼리가 필요합니다. Garcia는 Woods, Mickelson은 Donald, Els는 McIlroy를 연기했다는 것을 알 수있는 쿼리를 작성하려면 어떻게해야합니까?

도움말! :-)

+1

어쩌면 난 그냥 당신의 요구 사항을하지 않습니다. 그러나 "who who who"데이터와 이것을 게시 된 양식이 아닌 그냥 SELECT * FROM table WHERE event <> selection 쿼리하십시오. 샘플 출력에 중복 된 정보가 있습니다. 이벤트 중 하나를 선택할 수 있습니다. – MicSim

+0

안녕하세요, 빠른 답장을 보내 주셔서 감사합니다. 나는 약간의 질문을 잘못 입력했고, 지금 그것을 편집했다. 위 참조. 이벤트 필드에는 실제로 플레이어 초기 (예 : S. Garcia)가 포함되어 있지만 선택 필드에는 이니셜이 없습니다. 불행히도 이것이 Betfair에서 제공하는 원시 데이터입니다. 따라서 <>를 사용하면 "S. Garcia"=/"Garcia"로 작동하지 않습니다. 이 'clunky'질문에 대한 사과 - Befair의 원시 데이터는 끔찍하지만 그것이 전부입니다! MicSim에게 다시 한 번 감사드립니다! – RichieCunningham

답변

5
SELECT 
    g.event, 
    Min(g.selection) AS selection_a, 
    Max(g.selection) AS selection_b 
FROM Golf_matches AS g 
GROUP BY g.event 
UNION ALL 
SELECT 
    g.event, 
    Max(g.selection), 
    Min(g.selection) 
FROM Golf_matches AS g 
GROUP BY g.event 
ORDER BY 1, 2; 
+0

아, 잠깐 나에게있어 : –

+0

Epic. 고마워, 대단히 감사합니다! – RichieCunningham

3

일부 SQL 닌자가 와서이 접근법이 얼마나 나쁘다는 점을 분명히 지적하지만 방금 놀았습니다. 내가이 접근 방식은 지금까지 IS (내 선언을 포함하지만, 귀하의 경우 그냥 무시하고 테이블 이름으로 @Match 교체)

DECLARE @Match TABLE (
    eventName NVARCHAR(MAX), 
    selection NVARCHAR(MAX) 
) 

INSERT INTO @Match(eventName, selection) 
VALUES ('S. Garcia', 'Garcia'), 
     ('S. Garcia', 'Woods'), 
     ('P. Mickelson', 'Mickelson'), 
     ('P. Mickelson', 'Donald'), 
     ('E. Els', 'McIlroy'), 
     ('E. Els', 'Els') 

SELECT M1.eventName, M1.selection AS SelectionA, M2.selection AS SelectionB 
    FROM @Match M1 
     INNER JOIN @Match M2 
      ON M1.eventName = M2.eventName 
WHERE M1.selection <> M2.selection 
+0

나는 이것이 훌륭한 해결책이라고 생각한다. –

+2

하지만'JOIN'을'INNER JOIN'으로 대체하십시오. 이것은 Access 용입니다. –

+0

@ypercube 좋은 지적, 고정 – Manatherin

관련 문제