2016-06-02 2 views
0

과 일치합니다. 하나의 부서에 대괄호를 볼 수 있도록하기 위해 일치 항목 (게임 또는 원하는 항목)을 저장하기위한 테이블이 있습니다.토너먼트에 대한 SQL Server 쿼리는

CREATE TABLE [dbo].[Match] 
(
    [MatchID] [bigint] IDENTITY(1,1) NOT NULL, 
    [OrgDivisionID] [bigint] NOT NULL, 
    [MatchTimeLength] [bigint] NULL, 
    [ParentMatchID1] [bigint] NULL, 
    [ParentMatchID2] [bigint] NULL, 

    CONSTRAINT [PK_Match] 
     PRIMARY KEY CLUSTERED ([MatchID] ASC) 
) 

샘플 데이터 : 여기

는 테이블의

MatchID OrgDivisionID MatchTimeLength ParentMatchID1 ParentMatchID2 
---------------------------------------------------------------------- 
1  1    180    NULL   NULL 
2  1    180    NULL   NULL 
3  1    180    NULL   NULL 
4  1    180    NULL   NULL 
5  1    180    1    2 
6  1    180    3    4 
7  1    180    5    6 

(의 세부 어떤 팀 경기에 참여하고 지금 관련이없는 별도의 테이블에 저장됩니다 자 또는)

하나의 일치 항목은 0 개의 상위 일치 항목 (이 경우 첫 번째 일치/첫 번째 항목) 또는 1 또는 2 개의 상위 일치 항목에서 가져올 수 있습니다.

일치하는 항목이 단 하나의 상위 MatchID 인 경우 이전에 경쟁 한 사람과 비교하여 "부전승"이있는 사람과 일치가 생성되었음을 의미합니다.

일치하는 항목이 2 개의 상위 MatchID를 가지고있는 경우 이전에 경쟁 한 사람들과 모두 일치가 생성되었음을 의미합니다.

내가 도움이 필요한 것은 모든 일치 항목의 전체 경로를 보여주는 쿼리입니다. 예를 들어 MatchID 1 -> MatchID 5 -> MatchID 7

어떤 도움이나 제안이 좋을 것입니다. 감사합니다

+0

예상되는 출력을 게시 할 수 있습니까?이 부분은 여전히 ​​분명하지 않습니다. 7 .. "제가 도움이 필요한 것은 모든 일치 항목의 전체 경로를 보여주는 쿼리입니다. 예를 들어 MatchID 1 -> MatchID 5 -> MatchID 7 " – TheGameiswar

+0

당신은 또한 당신의 질문을 더욱 발전시키는 방법을보기 위해 여기에서 확인할 수 있습니다 .https : //spaghettidba.com/2015/04/24/how-to-post-at-sql- question-on-a-public-forum/ – TheGameiswar

+1

이것은 매우 전형적인 재귀 적 cte입니다. –

답변

1

공통 테이블 식 (CTE)이이 작업에 가장 잘 맞습니다.

;with cte as (
--anckor query 
select MatchID,ParentMatchID1,ParentMatchID2, 1 lvl 
from #match 
where matchid = 1 --or other id 
union all -- note: UNION ALL 
--recursive query 
select m.MatchID,m.ParentMatchID1,m.ParentMatchID2, lvl+1 
from #match m 
inner join cte on cte.matchid = m.ParentMatchID1 or cte.matchid = m.ParentMatchID2 
) 
--Get result from here 
select * from cte 
+0

감사합니다. 내가 찾고 있었던 것이 었습니다. – iambdot