2011-01-12 2 views
1

두 테이블이 함께 조인됩니다. "게시"왼쪽 외부 조인은 "주석"입니다.왼손 테이블을 기반으로 한 외부 조인의 레코드 수 제한

게시와 댓글 사이에 일대일 관계가 있습니다.

각 게시물에 대해 게시물 레코드와 관련된 모든 주석 (있는 경우)을 10 개씩 가져올 수 있기를 바랍니다.

일반적으로 이렇게하는 방법은 공통 테이블 식을 사용하고 ROW_NUMBER()를 사용하는 것입니다. 그러나 ROW_NUMBER()는 각 행을 계산합니다.이 경우 Post 레코드 만 계산하기 때문에 작동하지 않습니다.

나는 ROW_NUMBER() OVER (PARTITION)을보고 있었지만 예상 한대로 작동하지 않습니다. 처음 5 개 게시물, 내가 좋아하는 뭔가를 얻을 것입니다 원하는 경우

그래서 :

PostNumber  PostId  CommentId 
1    1   1 
1    1   2 
2    2   - 
3    8   3 
3    8   4 
4    9   5 
5    15   - 
+0

당신 10 게시물 기록을 원하는 같은 뭔가, 1+? POSTS 레코드 # 1에 100 개 이상의 댓글이있는 경우 –

답변

1

은 결과의 파티션 내에서 행의 순위를 반환 DENSE_RANK 기능을 사용에서보세요 어떤 랭크의 갭이없이 설정됩니다. 행의 순위는 행의 앞에 오는 고유 한 숫자 의 수에 1을 더한 것입니다.

가있을 수 코멘트와 함께

;WITH Vals AS (
     SELECT p.*, 
       DENSE_RANK() OVER(ORDER BY p.PostID) DenseRankID 
     FROM Post p LEFT JOIN 
       Comments c ON p.PostID = c.PostID 
) 
SELECT * 
FROM Vals 
WHERE DenseRankID <= 10 
관련 문제