2011-01-12 56 views
1

我有两个表,我外部联接在一起:“发布”与“评论”的左外部联接。根据左手表限制的外部联接记录数

帖子和评论之间存在一对多的关系。

我希望能够为每个帖子拉第一个,说10个帖子记录和所有关联的评论(如果有的话)。

我通常会这样做的方式是使用公用表表达式并使用ROW_NUMBER()OVER。但是,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条评论... – 2011-01-12 05:35:01

回答

1

看一看使用DENSE_RANK功能

返回结果的 分区中的行的秩在排名中没有任何 的空白。 行的排名是加上 问题行之前的不同 行列的数量。

喜欢的东西

;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