2016-06-30 42 views
0

我正在對1000個文檔執行語義分析。我想每個文件的前5名比賽。這裏是我正在使用的查詢;用於多個匹配的SQL語義相似度表

DECLARE @FTE hierarchyid 
SELECT @FTE = path_locator 
    from dbo.LatinBooks 

Select top (5) 
e.name 
,d.name as MatchedFTE 
,KEY_TBL.score 
FROM SEMANTICSIMILARITYTABLE 
    (dbo.LatinBooks, 
     file_stream, 
     @FTE) as KEY_TBL 
INNER JOIN dbo.LatinBooks d on KEY_TBL.matched_document_key= d.path_locator 
left Join (select path_locator,name from dbo.LatinBooks) e on @fte=e.path_locator 
Order by Key_tbl.score DESC; 

該查詢有效,它返回第一個文檔的熱門匹配項。我可以對腳本進行哪些更改,以便返回所有1000個文檔的匹配項。結果將顯示5000行(一個文件和五場比賽)

回答

0

你想row_number()

select * 
from (Select e.name, d.name as MatchedFTE, KEY_TBL.score, 
      row_number() over (partition by e.name order by KEY_TBL.score desc) as seqnum 
     from SEMANTICSIMILARITYTABLE(dbo.LatinBooks,file_stream, @FTE 
           ) KEY_TBL INNER JOIN 
      dbo.LatinBooks d 
      on KEY_TBL.matched_document_key = d.path_locator left Join 
      dbo.LatinBooks e 
      on @fte = e.path_locator 
    ) x 
where seqnum <= 5; 
+0

當我運行腳本,你送了它,它要求申報「@FTE」。如果聲明'@FTE',它將僅返回第一個文檔的頂部(5)。我需要匹配所有文檔 – Gjorge

+0

@Gjorge。 。 。您在原始查詢中有'@ FTE'。 –

+0

是的,我在原始查詢中有@fte – Gjorge