我有两个表,我在外面连接在一起:“发布”左外连接和“注释”。
帖子和评论之间存在一对多的关系。
我希望能够为每个帖子提取第一个,例如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 :(得分: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