2016-06-30 17 views
0

Ich führe Semantikanalyse auf 1000 Dokumenten durch. Ich möchte die Top 5 Spiele für jeden der Doc. Hier geht die Abfrage, die ich verwende;SQL Semanticsimilaritytable für mehrere Übereinstimmungen

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; 

Diese Abfrage funktioniert, es gibt die besten Übereinstimmungen für das erste Dokument zurück. Welche Änderungen kann ich an dem Skript vornehmen, damit die Übereinstimmungen für alle 1000 Dokumente zurückgegeben werden? Die Ergebnisse zeigen 5.000 Zeilen (One Doc und Fünf Spiele)

Antwort

0

Sie wollen 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

Als ich das Skript ausführen, wie Sie es geschickt, fragt er die ‚@FTE‘ zu erklären. Wenn '@FTE' deklariert wird, wird NUR die oberste (5) für das erste Dokument zurückgegeben. Ich brauche Spiele für alle Dokumente – Gjorge

+0

@Gjorge. . . Sie haben '@ FTE' in Ihrer ursprünglichen Abfrage. –

+0

Ja, ich habe @fte in der ursprünglichen Abfrage – Gjorge