Fabienne22: ORDER BY..... (Sortierreihenfolge frei definieren)

Hallo,

gibt es eine Möglichkeit die Sortierreihenfolge in MYSQL (Vers. 4... und 5...) frei zu definieren?
Heißt:
SELECT * FROM tabelle ORDER BY spalte1 ASC
Das ASC will ich ändern in z.B. "A,C,B" (also zuerst alles, was mit A anfängt, dann mit C und erst danch die C-Sachen).

Oder:
Gibt es eine Möglichkeit, die varchar-ASC-Reihenfolge zu ändern, so dass "Leerzeichen" am Anfang erst am Ende stehen.
Grund: Ich habe eine varchar-Spalte, in der zum Teil nicht drinsteht. Und diese Elemente möchte ich am Ende sehen, aber trotzdem die ASC-Sortierung der gefüllten Elemente haben.

Besten Dank für Eure Antworten!
Fab

  1. yo,

    Grund: Ich habe eine varchar-Spalte, in der zum Teil nicht drinsteht. Und diese Elemente möchte ich am Ende sehen, aber trotzdem die ASC-Sortierung der gefüllten Elemente haben.

    indem du zuerst nach einer pseudo-spalte sortierst.

    SELECT ...
    FROM ...
    ORDER BY CASE
                 WHEN spalte IS NULL THEN 0
                 ELSE 1
             END, spalte1 ASC
    ;

    Ilja

    1. Hallo nochmals,

      SELECT ...
      FROM ...
      ORDER BY CASE
                   WHEN spalte IS NULL THEN 0
                   ELSE 1
               END, spalte1 ASC
      ;

      Das funktioniert bei mir nur bedingt: Jetzt wird der eine Eintrag, in dem sie spalte leer ist, ganz oben ausgegeben.

      Was will ich machen?

      name | prozentwert
      Max  | 12
      Hans | 17
           | 32
      Fred | 16
      Mike | 32
      Tom  | 32

      Rauskommen soll "ORDER BY prozentwert DESC, name ASC", aber die leeren Einträge ganz unten!
      Ziel-Ergebnis:
      Mike, Tom, _, Hans, Fred, Max
      und nicht _, Mike, Tom, .....
      MYSQL sortiert Leerzeichen _vor_ den Buchstaben ein.

      Hat jemand ne Idee?

      Beste GRüße
      Fab

      1. Hi,

        ORDER BY CASE
                     WHEN spalte IS NULL THEN 0
                     ELSE 1
                 END, spalte1 ASC
        ;

        Das funktioniert bei mir nur bedingt: Jetzt wird der eine Eintrag, in dem sie spalte leer ist, ganz oben ausgegeben.

        Und auf die Idee, die Sortierreihenfolge fuer die Pseudo-Spalte dann einfach mal umzudrehen, kommst du nicht?

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. Hi,

          Und auf die Idee, die Sortierreihenfolge fuer die Pseudo-Spalte dann einfach mal umzudrehen, kommst du nicht?

          Hm, manchmal steht man neben sich....

          Lösung:
          SELECT * FROM table
             ORDER BY prozentwert DESC, CASE
                       WHEN name IS NULL OR name='' THEN 1
                       ELSE 0
                   END, name ASC;

          Wichtig ist noch das name ASC am Ende: Sonst werden die nicht richtig sortiert.

          Besten Dank ans Team!