2016-07-29 4 views
0

Ich arbeite an der AutoSearch UI, wo ich die Namen suchen muss, die aus dem Buchstaben, den ich suche, im Textfeld suchen. Ex. Sie können nehmen, wie das Suchfeld in der Google-Suchmaschine funktioniert, wo, wenn wir anfangen, Buchstaben einzugeben, es Liste unter diesem gesuchten Text zeigt.Ordery By und Like funktioniert nicht wie erwartet

Unten ist die Abfrage, wo ich Ergebnisse erhalte, wenn ich LIKE benutze, aber es funktioniert nicht wie erwartet, es gibt zwei Screenshots, derzeit bekomme ich die Ergebnisse wie das erste Bild.

Ich fühle sogar order by funktioniert auch nicht.

HINWEIS: Ich brauche beide Order By.

Obwohl es eine Liste gibt, die von d startet, wird es zuerst nicht angezeigt.

enter image description here

Second Pic:

enter image description here

Wenn man die zweiten Ergebnisse kommen richtig, aber warum soll ich die Wildcard-Syntax unter ProfileName entfernen.

Lassen Sie mich wissen, wie ich das beheben sollte.

+0

stimme ich zu, ich nur wenige Spalten zeigte, dass es hier zu zeigen, trotzdem danke. – Manjuboyz

Antwort

0

Ihr Ergebnis zeigt korrekt an, was Sie in Ihrer Abfrage geschrieben haben.

Das erste Ergebnis zeigt alle Datensätze mit

  • IsPrimary = 1 UND LastName beginnt mit 'd', OR
  • ProfileName beginnt mit 'd'

das zweite Ergebnis zeigt Datensätze mit

  • IsPrimary = 1 UND LastName beginnt mit 'd', OR
  • ProfileName = 'd'

Beachten Sie, dass LIKE Fall unempfindlich ist.

Wenn Sie die Suche zu LastName priorisieren möchten, dann zu ProfileName.

Tun Sie dies

Select * FROM 

(
SELECT [your list here], 1 as priority 
FROM Employee E 
    INNER JOIN [your list here] 
WHERE 
    EP.IsPrimary = 1 AND E.LastName LIKE @SearchByChar + '%' 

UNION 

SELECT [your list here], 2 as priority 
FROM Employee E 
    INNER JOIN [your list here] 
WHERE 
    P.ProfileName LIKE @SearchByChar + '%' 
) s 

ORDER BY priority 
+0

Richtig, aber ich muss Joker für meine beiden Bedingungen verwenden, ich kann keine Gründe angeben, dass wir 'Beginnt mit' nur für den Nachnamen verwenden sollen. – Manjuboyz

+0

In der zweiten Abfrage gibt es keinen Platzhalter, also prüfen Sie, ob 'Profilname' gleich 'd' ist, was zu keinem Ergebnis führt.Die Überprüfung von 'LastName LIKE 'd%' gibt Ihnen eine Ergebnisliste, wobei' LastName' mit 'd' beginnt. – ydoow

+0

Oder versuchen Sie, die Suche nach 'LastName' zu ​​priorisieren? Dann können Sie mit 'UNION' zwei Abfragen mit separater Suche verbinden. – ydoow

0

Wenn Sie name Matches oben Profil Spiele erscheinen, könnten Sie genauso wie etwas tun:

ORDER BY 
    CASE WHEN E.LastName LIKE @SearchByChar + '%' THEN 0 ELSE 1 END, 
    E.LastName, 
    P.ProfileName 
Verwandte Themen