Ich muss die Daten nach zwei Spalten sortieren, wie mache ich das?
Das ist meine Tabelle:
%Vor%Ich muss diese Tabelle nach ImpTime und ImpName sortieren und es sollte so aussehen:
%Vor%Ich verwende diese Abfrage, aber sie sortiert die Tabelle nicht nach Name, sondern nur nach Namen, wenn die Zeit für mehrere Zeilen denselben Wert hat.
%Vor%Diese Abfrage gibt mir eine Tabelle wie folgt:
%Vor%Gibt es eine Möglichkeit, diese beiden Spalten gleichzeitig zu sortieren?
BEARBEITEN
Was passiert, wenn ich order by ImpFile DESC, ImpTime desc
verwende?
Es gibt mir eine Ergebnistabelle wie folgt:
Erhalte den Leiter jeder Gruppe und sortiere sie nach absteigender Zeit:
%Vor%Ausgabe:
%Vor%Dann schließe dich den Anhängern des Anführers an und erhalte die Zeit des Anführers (TimeGroup):
%Vor%Ausgabe:
%Vor%Die Logik der Abfrage besteht darin, dass wir die Zeit der Follower (die mit dem Namen) an die Zeit ihres Führers (TimeGroup) auf der Grundlage von ImpFile angleichen. Der Leiter und seine Anhänger haben dieselbe Zeitgruppe, und wenn wir sie nach der Zeit sortieren, bleiben sie zusammen; dann sortieren wir nach dem Namen
Live-Test: Ссылка
Wenn wir möchten, dass der Gruppenleiter hinter seinen Followern erscheint, geben Sie einen Fall ein, wenn Sie ORDER BY:
verwenden %Vor%Ausgabe:
%Vor%Live-Test: Ссылка
Wie es funktioniert:
%Vor%Ausgabe:
%Vor%Live-Test: Ссылка
Zunächst sollten Sie erkennen, dass SQL Server mit der Granularität datetime
nicht zwischen 2012-05-16 09:55:37.384
und 2012-05-16 09:55:37.385
unterscheiden kann: beide würden als 2012-05-16 09:55:37.384
gespeichert.
Wenn Sie daran denken, dass Sie die Gruppen nach MAX(ImpTime) DESC
und die Detailzeilen nach ImpTime DESC
sortieren möchten, könnten Sie Folgendes versuchen:
Wenn auf SQL Fiddle ausgeführt wird, erzeugt dies die folgende Ausgabe für Ihr Beispiel:
%Vor% Und beachte, dass ich ImpTime
vorübergehend als varchar
definiert habe, nicht als datetime
, nur um eine bessere Demonstration zu erhalten, denn, wie ich schon sagte, würde die Granularität von datetime
leicht resultieren verschiedene Werte gespeichert (und entsprechend etwas andere Ausgabe produziert).
Sie möchten wahrscheinlich die Millisekunden scrubben: Ссылка
%Vor%Ausgabe:
%Vor%Methode zum Löschen der Millisekunden, die hier gefunden werden: SQL Server entfernt Millisekunden von datetime
Wenn Sie die ursprüngliche Uhrzeit beibehalten und anzeigen möchten, tun Sie dies einfach: Ссылка
%Vor%Ich denke, SqlFiddle zeigt nicht die Millisekunden. Bitte versuchen Sie die zweite Abfrage auf Ihrem Sql-Server dort, ich bin derzeit auf anderen Betriebssystemen jetzt, ich kann nicht die tatsächliche Ausgabe der zweiten Abfrage
sehenHier ist die Ausgabe der zweiten Abfrage mit der intakten Datetime, getestet auf SSMS:
%Vor%Tags und Links sql sql-server sql-server-2005