Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Sortieren mit mehreren Merkmalen in einer Spalte

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von IchHH, 22 Juni 2017.

  1. IchHH

    IchHH Datenbank-Guru

    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: 22 Juni 2017
  2. ukulele

    ukulele Datenbank-Guru

    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.
     
  3. IchHH

    IchHH Datenbank-Guru

    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.
     
  4. ukulele

    ukulele Datenbank-Guru

    Integer kann kein 0901 abbilden.
     
  5. IchHH

    IchHH Datenbank-Guru

    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
     
  6. ukulele

    ukulele Datenbank-Guru

    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.
     
  7. IchHH

    IchHH Datenbank-Guru

    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?
     
  8. ukulele

    ukulele Datenbank-Guru

    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).
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden