根据左侧表限制外部联接中的记录数

时间:2011-01-12 05:30:50

标签: sql-server join

我有两个表,我在外面连接在一起:“发布”左外连接和“注释”。

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

我希望能够为每个帖子提取第一个,例如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         -

1 个答案:

答案 0 :(得分: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