2014-11-10 2 views
0

나는 지난 게임에 대한 데이터가 들어있는 테이블 GAMES을 가지고 있습니다. 이 쿼리의 요점은 같은 날짜에 플레이 된 모든 게임을 찾고 날짜, 그 두 팀과 결과를 출력하는 것입니다. 테이블은 다음과 같이 설정 :SQL Server 간단한 쿼리 테이블에 직접 연결

게임

Home | Visitors|Date  |Result 
------------------------------------- 
Bengals| Browns | 1/1/2012 | Tie 
Browns | Bengals | 1/1/2012 | Loss 
Giants | Jets | 4/2/2013 | Win 
Giants | Cowboys | 4/2/2013 | Loss 
Bears | Ravens | 5/3/2012 | Tie 
Bills | Dolphins| 10/11/2014| Win 
... 

나는 해결책이

select 
    A.Date, A.Home, A.Visitors, A.Result 
from 
    GAMES as A, GAMES as B 
where 
    A.Date = B.Date 
    and A.Home = B.Visitors; 

과 유사하지만,이 특정 쿼리의 쿼리에서 테이블을 조인하는 생각이 먼저 게임을 하나만 반환합니다. 총 6 게임이 나타나야하며 테이블 A의 값만 반환합니다. 쿼리를 작성하여 한 번에 모든 게임을 찾을 수있는 방법이 있습니까? 특정 쿼리 각각 하나씩 찾으십니까? 감사.

1 2012-1-1 Bengals Browns Tie 
2 2012-1-1 Browns Bengals Loss 
3 2013-4-2 Giants Jets Win 
4 2013-4-2 Giants Cowboys Loss 
etc. 
+0

원하는 결과 샘플을 게시 할 수 있습니까? 샘플 데이터는 매우 혼란 스럽습니다. –

+0

나는 – user3587186

+1

을 포함하도록 편집했습니다. 출력이 기존 데이터 세트와 동일하면 날짜순으로 주문하십시오 ... – Chris

답변

0

어때?

SELECT 
    A.Date, A.Home, A.Visitors, A.Result 
FROM 
    GAMES as A 
WHERE EXISTS (SELECT * 
       FROM GAMES as B 
       WHERE A.DATE = B.DATE 
       AND (A.Home <> B.Home 
       OR A.Visitors <> B.Visitors)) 
ORDER by A.Date ASC 
+0

이, 약간의 비틀기와 협력 덕분에 결국 : WHERE A.DATE = B.DATE AND (A.Home <> B.Home \t \t \t \t \t 또는 A.Visitors <> B.Visitors)) – user3587186

+0

변경 사항에 맞게 코드 샘플을 업데이트했습니다. 다행히 도움이 될 수 있습니다 - 귀하의 SQLing을 즐기십시오! :) – Chris

0

좋아, 그래서 두 개 이상의 게임이 발생한 날짜를 찾을 무엇 당신이 할 노력하고 같은 소리 :

원하는 결과의 형태가 될 것입니다. 이 경우

SELECT a.Date, count(*) as CountOfDate 
FROM GAMES a 
GROUP BY a.Date 
HAVING count(*) > 1 
+0

덕분에 데이터가 다소 모호했습니다. 테이블의 모든 게임이 다른 게임과 일치하는 날짜는 아닙니다. 사실, 대부분의 데이트는 오직 하나의 게임 만 플레이하기 때문에 두 게임이있는 데이트를 찾으려고합니다. 나는 현실에 좀 더 가까이 다가 가기 위해 테이블을 편집했다. 이 모든 정확한 정보를 잡고 있도록 – user3587186