2017-09-05 2 views
0

Der Eingang und der gewünschte Ausgang unterSQL Server: Sortieren der Werte basierend auf ID-Spalte

gezeigt

Eingang

id Msg res time 
-------------------- 
1 a1 8 11:14:00 
1 qq 8 11:15:00 
1 d1 8 11:16:00 
1 e1 8 11:17:00 
1 f1 8 11:18:00 
1 h 4 11:19:00 
1 i 4 11:20:00 
1 m35 4 11:21:00 
1 n 4 11:22:00 
1 o 4 11:23:00 
1 p0 4 11:23:00 
2 a1 4 11:24:00 
2 p0 4 11:25:00 
2 qq 4 11:26:00 
2 c 4 11:27:00 
2 h 4 11:28:00 
2 o 4 11:29:00 
3 c 4 11:30:00 
3 qq 4 11:31:00 
3 e1 4 11:32:00 

gewünschter Ausgang:

id Msg res time 
--------------------- 
1 a1 8 11:14:00 
1 d1 8 11:16:00 
1 e1 8 11:17:00 
1 f1 8 11:18:00 
1 h 4 11:19:00 
1 i 4 11:20:00 
1 p0 4 11:24:00 
1 qq 8 11:15:00 
1 m35 4 11:21:00 
1 n 4 11:23:00 
1 o 4 11:22:00 
2 a1 4 11:24:00 
2 c 4 11:27:00 
2 h 4 11:28:00 
2 p0 4 11:25:00 
2 qq 4 11:26:00 
2 o 4 11:29:00 
3 c 4 11:30:00 
3 e1 4 11:32:00 
3 qq 4 11:31:00 

Der Code ist unter

CREATE TABLE k (id int, Msg varchar(1000), result int, time time); 

INSERT INTO k VALUES (‘1’, ‘a1’, ‘8’, ‘11:14:00’) 
INSERT INTO k VALUES (‘1’, ‘qq’, ‘8’, ‘11:15:00’) 
INSERT INTO k VALUES (‘1’, ‘d1’, ‘8’, ‘11:16:00’) 
INSERT INTO k VALUES (‘1’, ‘e1’, ‘8’, ‘11:17:00’) 
INSERT INTO k VALUES (‘1’, ‘f1’, ‘8’, ‘11:18:00’) 
INSERT INTO k VALUES (‘1’, ‘h’, ‘4’, ‘11:19:00’) 
INSERT INTO k VALUES (‘1’, ‘i’, ‘4’, ‘11:20:00’) 
INSERT INTO k VALUES (‘1’, ‘m35’, ‘4’, ‘11:21:00’) 
INSERT INTO k VALUES (‘1’, ‘n’, ‘4’, ‘11:22:00’) 
INSERT INTO k VALUES (‘1’, ‘o’, ‘4’, ‘11:23:00’) 
INSERT INTO k VALUES (‘1’, ‘p0’, ‘4’, ‘11:23:00’) 
INSERT INTO k VALUES (‘2’, ‘a1’, ‘4’, ‘11:24:00’) 
INSERT INTO k VALUES (‘2’, ‘p0’, ‘4’, ‘11:25:00’) 
INSERT INTO k VALUES (‘2’, ‘qq’, ‘4’, ‘11:26:00’) 
INSERT INTO k VALUES (‘2’, ‘c’, ‘4’, ‘11:27:00’) 
INSERT INTO k VALUES (‘2’, ‘h’, ‘4’, ‘11:28:00’) 
INSERT INTO k VALUES (‘2’, ‘o’, ‘4’, ‘11:29:00’) 
INSERT INTO k VALUES (‘3’, ‘c’, ‘4’, ‘11:30:00’) 
INSERT INTO k VALUES (‘3’, ‘qq’, ‘4’, ‘11:31:00’) 
INSERT INTO k VALUES (‘3’, ‘e1’, ‘4’, ‘11:32:00’) 

select * 
from k 
order by 
    case 
     when Msg = ‘a1’ or Msg = ‘b1’ or Msg = ‘b0’ or Msg = ‘c’ or Msg = ‘d1’ or Msg = ‘e1’ or Msg = ‘f1’ or Msg = ‘g’ or Msg = ‘h’ or Msg = ‘i’ then 1 
     when Msg = ‘p0’ then 2 
     when Msg = ‘p1’ then 3 
     when Msg = ‘qq’ then 4 
     when Msg = ‘i’ then 5 
     when Msg = ‘j’ then 6 
     when Msg = ‘k0’ then 7 
     when Msg = ‘k1’ then 8 
     when Msg = ‘l’ then 9 
     when Msg = ‘l1’ then 10 
     else 11 
    end, Msg 

Dieser Code gibt jedoch nicht die gewünschte Ausgabe zurück. Wenn nur ein Satz von Werten in der Spalte 'id' vorhanden ist, wird die Spalte 'Msg' entsprechend der im Code angegebenen Bedingung entsprechend sortiert. Aber in der Beispieleingabe gibt es 3 verschiedene Sätze von Werten in der Spalte 'id' (1, 2 und 3). Wenn ich den obigen Code ausführe, wird die Sortierung für die gesamten Daten durchgeführt. Es ist offensichtlich, weil ich keine Bedingungen für die Gruppierung nach "ID" -Spalte angegeben habe. Gibt es eine Lösung, um das gewünschte Ergebnis zu erzielen? (Ich habe auch versucht, jede Zeile in der Input-Tabelle mit Hilfe von Cursors zu holen, aber selbst dort konnte ich die Bedingungen nicht korrekt in die Schleife schreiben). Jede Hilfe wäre nützlich.

Antwort

0

Dies ist, was Sie suchen:

select * from k order by id, Msg 

Grundsätzlich haben Sie bereits den Wert von ‚id‘ Spalte und Sie mögen das Ergebnis durch zwei Spalten, um zu bestellen, zuerst die Id und dann der Nachricht; Das bedeutet, dass die Zeilen, die in der ID denselben Wert haben, nach dem Wert von Msg sortiert werden.

Verwandte Themen