2015-10-06 78 views
2

我正在使用stackoverflow sqlquery portal。我想拥有最多1000个标签,并且有最多的帖子数量。并且对于每个标签需要标识为60的标识作为其标签。所以我需要遍历所有100个标签,并获得与他们链接的前60个postid。请给我一些帮助。sql服务器:通过子查询循环并限制主查询对应于子查询中的evry行

她的我的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) as ok 
ON ok.Id = test.TagId 

但它只返回60个帖子,但我需要每个顶部标记60。请告诉我如何迭代子查询。

回答

2
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 
1

尝试这样的:该查询将获取三个对象进行各类型

张贴到一个空的查询窗口,适应您的需求的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 
+0

它的工作。谢谢[Shnugo](http://stackoverflow.com/users/5089204/shnugo) 如果有足够的声望,我会有upvoted。 –

+0

@AkhilBatra,嗨,很高兴读到这个。我推了你一下;-)帮你帮忙;-) – Shnugo