Sql server sql server:在子查询中循环,并在与子查询中的evry行对应的主查询中限制结果
我正在stackoverflow sqlquery portal上工作。我想有前1000名标签与最大后计数。对于每个标签,需要60个贴子的id,并将该标签作为标签。所以我需要在所有100个标签之间循环,并将前60个贴子与它们链接起来。请帮帮忙 她是我的sql语句Sql server sql server:在子查询中循环,并在与子查询中的evry行对应的主查询中限制结果,sql-server,subquery,Sql Server,Subquery,我正在stackoverflow sqlquery portal上工作。我想有前1000名标签与最大后计数。对于每个标签,需要60个贴子的id,并将该标签作为标签。所以我需要在所有100个标签之间循环,并将前60个贴子与它们链接起来。请帮帮忙 她是我的sql语句 SELECT Top 60 PostId,ok.Id FROM PostTags as test INNER JOIN (SELECT TOP 50 Id,Count FROM Tags ORDER BY Tags.Count DESC
SELECT Top 60 PostId,ok.Id
FROM PostTags as test
INNER JOIN (SELECT TOP 50
Id,Count
FROM Tags
ORDER BY Tags.Count DESC) as ok
ON ok.Id = test.TagId
但它只返回60个帖子,但我需要60个顶级标签。请告诉我如何迭代子查询。像这样尝试:查询将从sys.objects中提取每种类型的三个对象 将此发布到一个空的查询窗口,以适应您的需要
WITH TypesToGroup AS
(
SELECT DISTINCT type_desc FROM sys.objects
)
select *
from TypesToGroup
cross apply
(
select top 3 x.*
from sys.objects as x
where x.type_desc=TypesToGroup.type_desc
) AS ThreeOfEach
成功了。谢谢,如果我有足够的声誉,我会投更高的票。@AkhilBatra,你好,很高兴读到这篇文章。我推了你一点;-帮助你帮助我-
WITH CTEM AS
(
SELECT TOP 100 T.ID
FROM Tags T ORDER BY T.[COUNT] DESC
),
CTE as
(
SELECT P.POSTID,T.ID
,ROW_NUMBER() OVER(PARTITION BY T.ID ORDER BY P.POSTID DESC) AS RN
FROM PostTags P
INNER JOIN CTEM T ON P.TAGID = T.ID
)
SELECT * FROM CTE WHERE RN<=60