Sortieren mit mehreren Merkmalen in einer Spalte

IchHH

Datenbank-Guru
Beiträge
282
Hallo,

ich wollte eine Tabelle nach folgenden Muster sortieren:

Code:
Order By    left([KV45_zeilenID],1) ASC, left([KV45_zeilenID],2) ASC, left([KV45_zeilenID],3) ASC

Was da aber rauskommt hat nichts mit einer Sortierung zutun die ich haben wollte. Wie also kann ich veranlassen das SQL tatsächlich nur auf die 1 Zahl achtet und sortiert, dann nur nach der 2 Zahl (wobei die Sortierung der 1 Zahl erhalten bleibt) usw. sortiert?

Ergebnis sollte so aussehen:

3770
3771
3772
3773
3774
3775
377
3780
3781
3782
3783
3784
3785
3786
3787
378
3790
3791
3792
3793
3794
3795
3796
3797
3798
379
37
38
390
393
395
396
399
39
3
 
Zuletzt bearbeitet:
Werbung:
Lass mich raten, die Spalte hat ein Textformat?

Du musst nicht erst nach dem ersten Zeichen sortieren und dann explizit nach den Folgezeichen, wenn du einfach nach der Spalte sortierst passiert das automatisch.
 
Das Format ist int und wenn ich nur so sortiere macht er zwar etwas, allerdings kommt nach 14 die 0901 und nach der 1904 die 25 und dann die 2. Macht für irgendwie noch kein Sinn.
 
Bin hier immer noch nicht weiter. Wie kann ich eine Sortierung vornehmen die erst die dreistelligen sortiert und zwar nur nach den ersten beiden Zahlen und dann die zwei Stellige darunter setzt? Also

400
401
402
403
404
405
406
407
408
409
40
410
411
412
413
414
415
416
417
418
419
41
 
Code:
ORDER BY left(cast(spalte AS VARCHAR(10)) + '9',3) ASC, len(cast(spalte AS VARCHAR(10))) DESC
Aber das würde nur genau in dieser Konstellation, also zwei und drei Stellen funktionieren. Wenn es noch mehr Stellen gibt muss man das anpassen / ändern.
 
Ok also erst nach den ersten 3 Zahlen sortieren, aufsteigend und dann nach Anzahl der Zeichen absteigend. Ich verstehe nun nicht genau wie das SQL Interpretiert. Aber funktionieren tut es. Allerdings möchte ich es verstehen zumal bestimmt irgendwann 3 und 4 stellige statt 2 und 3 stellige Zahlen vorhanden sind. Muss ich dann nur die 3 zu einer 4 umwandeln?
 
Werbung:
Also erstmal konvertiere ich die Spalte bewusst in eine Zeichenkette, ich gehe mal davon aus das das gezeigte ein Integer ist (für sich genommen wäre das ja erstmal sinnvoll). Dann fülle ich mit '9' (als Zeichen) auf und schneide hinten alles ab was mehr als 3 Zeichen lang ist. Also würde eine 9 angehängt, wenn du mit mehr Stellen arbeitest kannst du auch 9999999 anhängen, du musst nur auf die richtige Länge kürzen.

Als zweites sortiere ich dann (weil 409 und 40 und jetzt in der ersten Sortierung gleichwertig sind), nach der Länge absteigend (auch hier wieder Länge der Zeichenkette).
 
Zurück
Oben