Der Eingang und der gewünschte Ausgang unterSQL Server: Sortieren der Werte basierend auf ID-Spalte
gezeigtEingang
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.