2015-10-06 73 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