Hier ist die Situation, die ich zu lösen versuche:
Ich habe eine Abfrage, die eine Reihe von Datensätzen zurückgeben könnte. Das Feld, nach dem sortiert wird, könnte eine Anzahl verschiedener Werte haben - für diese Frage werden wir sagen, dass der Wert A, B, C, D, E oder Z sein könnte
Abhängig von den Ergebnissen der Abfrage muss sich die Sortierung nun wie folgt verhalten: Wenn nur A-E-Datensätze gefunden werden, ist das Sortieren "natürlich" in Ordnung. Wenn jedoch ein Z-Datensatz in den Ergebnissen enthalten ist, muss es das erste Ergebnis in der Abfrage sein, aber der Rest der Datensätze sollte in "natürlicher" Sortierreihenfolge sein.
Wenn zum Beispiel A C D gefunden wird, sollte das Ergebnis
sein %Vor%Aber wenn A B D E Z gefunden werden, dann sollte das Ergebnis sortiert werden:
%Vor%Derzeit sieht die Abfrage wie folgt aus:
%Vor%Ich weiß, dass ich eine Sortierfunktion schreiben kann, um das zu tun, was ich will, aber wegen der Verwendung der Ergebnisse kann ich nicht scheinen, weil die Ergebnisse von einer Drittanbieter-Bibliothek verarbeitet werden, zu der ich bin nur die SQL-Abfrage übergeben. Es verarbeitet dann die Ergebnisse und es scheint keine Haken für mich zu geben, um die Ergebnisse zu sortieren und die Ergebnisse einfach an die Bibliothek zu übergeben. Es muss die SQL-Abfrage selbst durchführen, und ich habe keinen Zugriff auf den Quellcode der Bibliothek.
Also könnt ihr allen SQL-Gurus da draußen eine Frage stellen, die das macht, was ich will?
Wie identifizieren Sie den Z-Datensatz? Was unterscheidet es? Sobald Sie das verstanden haben, fügen Sie es Ihrer ORDER BY-Klausel hinzu.
%Vor%Auf diese Weise wird nur der Z-Datensatz mit der ersten Sortierung übereinstimmen, und alle anderen Datensätze werden nach Sortierung zweiter Ordnung (Name) sortiert. Sie können die Sortierung zweiter Ordnung ausschließen, wenn Sie sie wirklich nicht benötigen.
Beispiel: Wenn Z die Zeichenfolge 'Bob' ist, lautet Ihre Abfrage möglicherweise:
%Vor%Meine Beispiele sind für T-SQL, da Sie nicht erwähnt haben, welche Datenbank Sie verwenden.
Es gibt eine Reihe von Möglichkeiten, dieses Problem zu lösen, und die beste Lösung hängt von einer Reihe von Faktoren ab, die Sie nicht diskutieren, wie die Art der A..Z-Werte und welches Datenbankprodukt Sie verwenden.
Wenn Sie nur einen einzigen Wert haben, der oben sortiert werden muss, können Sie ORDER BY
einen Ausdruck zuweisen, der diesen Wert auf den niedrigsten möglichen Sortierwert abbildet (mit CASE
oder IIF
oder IFEQ
, abhängig von Ihre Datenbank).
Wenn Sie mehrere verschiedene spezielle Sortierwerte haben, könnten Sie ORDER BY
einen komplizierteren Ausdruck oder Sie könnten UNION
zusammen mehrere SELECT
s, mit einem SELECT
für die Standardsortierungen und eine zusätzliche SELECT
für jede spezieller Wert. Das SELECT
s würde eine Sortierspalte enthalten.
Wenn Sie schließlich einige Werte haben, können Sie die Sortierwerte in eine separate Tabelle und JOIN
that table in Ihre Abfrage einfügen.