MySql: Abfrage mit Sortierung über 2 Spalten "kombiniert"

guenter024

Erfahrenes Mitglied
Hallo Tutorials-Gemeinde,

ich habe eine Frage zur Sortierung.
Als Beispiel habe ich folgende Datenbank zum Testen genommen:

Code:
Bezeichnung        Wert1        Wert2     
Titel 1         2             9
Titel 2         4             7
Titel 3         6             5
Titel 4         8             3

Nach dem Sortieren mit bspw. ASC möchte ich das Ergebnis in der Reihenfolge Titel 1, Titel 4, Titel 2, Title 3
Also praktisch über die Spalten Wert1 und Wert2 übergreifend sortieren.

Hoffe jemand weiß Rat :)

LG
 
Hallo,

wenn ich dich richtig verstehe, dann wird das so, wie du dir das vorstellst nichts.

Ist zwar nicht der hübcheste Code, sollte aber in etwa funktionieren:

SQL:
SELECT
    sortierung.BEZEICHNUNG
    ,DT.WERT1
    ,DT.WERT2
FROM
    (
        SELECT
            BEZEICHNUNG as BEZEICHNUNG_sort
            ,MIN(WERT)    as WERT_min
        FROM
            (
                    SELECT
                        BEZEICHNUNG
                        , WERT1 as WERT
                    FROM
                        DEINE_TABELLE

                UNION

                    SELECT
                        BEZEICHNUNG
                        , WERT2 as WERT
                    FROM
                        DEINE_TABELLE
            ) as sortierte_tabelle
            GROUP BY
                BEZEICHNUNG
            ORDER BY
                WERT_min asc
    ) sortierung
    INNER JOIN
        DEINE_TABELLE DT
        ON DT.BEZEICHNUNG = sortierung.BEZEICHNUNG

Was mache ich hier. Zuerst führe ich ein unpivot zurück. Dann dieser neuen Tabelle gebe ich mir zu jeder Bezeichung den minimalsten Wert aus und sortiere danach. Am Ende hänge ich an der Liste nur die ursprüngliche Tabelle wieder an. Bitte beachte, dass in dem Fall die Bezeichnung unique sein muss.

Nachtrag: Solltes du mehr als 2 oder 3 Werte haben, solltes du dir die unpivot-Funktion anschauen.

Gruß Patrick
 
Ich weiss: Uralt, aber ich konnte nicht widerstehen.
Sollte in jeder Datenbank funktionieren (LEAST ist nicht ANSI-Standard)
getestet in SQLite
SQL:
SELECT DISTINCT T1.Bezeichnung FROM 
(SELECT Bezeichnung, Wert1 As Wert 
FROM Test
UNION 
SELECT Bezeichnung, Wert2 As Wert 
FROM Test ORDER BY Wert) AS T1
 
Zurück