2011-01-12 70 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