使用Group By和Multiple Columns在SQL中获取两个连接表

时间:2015-01-07 16:51:42

标签: sql sql-server

我已经阅读了这里的每个相关问题,但无法弄清楚或修改已接受的答案以实现我想要的目标。

我有两张桌子:

新闻:Id,Title,CategoryId NewsCategory:Id,Title

我想列出所有NewsCategories,并在同一个Sql查询中包含属于此类别的10行新闻。

我现在正在查询此查询:

Select C.Id As CategoryId, C.Title As CategoryTitle, N.Id, N.Title
From NewsCategories C, News N
Where N.CategoryId In (C.Id)
Order By C.Id Desc

但无法弄清楚如何限制返回的“新闻”数量而不限制NewsCategories。

1 个答案:

答案 0 :(得分:1)

只需使用OUTER APPLY

SELECT C.Id AS CategoryId, C.Title AS CategoryTitle, N.Id, N.Title
From NewsCategories C
OUTER APPLY (
   SELECT TOP 10 *
   FROM News 
   WHERE CategoryId = C.Id
) AS N
ORDER BY C.Id Desc

根据您的要求和News表架构,您可以在ORDER BY子查询中执行额外的OUTER APPLY,例如,获取每个类别的10条最新消息或按字母顺序排列的10条最新消息