T-SQL sortieren nach den meisten gesuchten Wörtern, die in einer Spalte enthalten

Zum Beispiel habe ich folgende Abfrage ausgeführt:

Select id, question From tblQuestions Where question like '%Leave%' or question like '%Balances%' or question like '%Policy%' 

Es wird die Zeilen zurückgeben, wo die question eines der obigen 3 Wörter enthält. Ist es möglich, dass das Ergebnis so sortiert ist, dass die Frage, die die meisten Wörter in der obigen Abfrage enthält, zuerst und so weiter kommen sollte (wie in der folgenden Tabelle gezeigt). (gesuchte Wörter können mehr als drei sein)

 | id | question | |----|--------------------------------------------| | 8 | Define the *policy* of *leave* *balances*? | | 2 | Why my *leave* *balance* is 0 | | 1 | What is *leave*? | 

Wenn Sie nicht wollen, um die gleichen Bedingungen zweimal für jeden Suchbegriff zu schreiben, können Sie eine cte mit bedingten aggrigation:

Erstellen und Befüllen der Beispieltabelle ( Bitte speichern Sie uns diesen Schritt in Ihren zukünftigen Fragen)

 DECLARE @T as table ( Id int, Question varchar(200) ) INSERT INTO @T VALUES (1,'What is leave?'), (2,'Why my leave balance is 0?'), (3, 'Where is my mind?'), (8,'Define the policy of leave balances?') 

Die Abfrage:

 ;WITH CTE AS ( SELECT Id, Question, SUM(CASE WHEN Question Like '%Leave%' THEN 1 ELSE 0 END) + SUM(CASE WHEN Question Like '%Balance%' THEN 1 ELSE 0 END) + SUM(CASE WHEN Question Like '%Policy%' THEN 1 ELSE 0 END) As MatchCount FROM @T GROUP BY Id, Question ) SELECT Id, Question FROM CTE WHERE MatchCount > 0 ORDER BY MatchCount DESC 

Ergebnisse:

 Id Question 8 Define the policy of leave balances? 2 Why my leave balance is 0? 1 What is leave? 

Dies ist die Full Test Search . Außerdem kann es verschiedene Grammatikformen entsprechen, dh balances und balance . Sie können trotzdem versuchen, die reguläre Syntax wie im folgenden Snippet zu verwenden:

 SELECT id, question FROM tblQuestions WHERE question LIKE '%Leave%' OR question LIKE '%Balance%' OR question LIKE '%Policy%' ORDER BY CASE WHEN question LIKE '%Leave%' THEN 1 ELSE 0 END + CASE WHEN question LIKE '%Balance%' THEN 1 ELSE 0 END + CASE WHEN question LIKE '%Policy%' THEN 1 ELSE 0 END DESC