Benutzerdefinierte Sortierung

Ludwigmller

SQL-Guru
Beiträge
171
Hallo,
wie kann man ein Abfrageergebnis nach einer selbstdefinierten Reihenfolge sortieren?
Bsp.: die Spalte "art" enthält die Werte "Als zweites", "Als drittes", "Test", "Test2". Das Abfrageergebnis soll in folgender Reihenfolge angezeigt werden: "Test", "Als zweites", "Als drittes", alle anderen Werte von Spalte "art".

Gruß Ludwig
 
Werbung:
Habe doch noch selber etwas gefunden:

Gibt es noch bessere Lösungen?
 
ich hoffe für Dich, daß das eher nur eine Fingerübung ist und nichts reales und nicht mit vielen weitere Bedingungen ...

Code:
postgres=# select * from ludwigmller ;
      t      
-------------
 x
 y
 a
 m
 Als zweites
 Als drittes
 Test
 Test2
(8 rows)

postgres=# select * from ludwigmller order by case when t='Test' then '1' when t='Als zweites' then '2' when t='Als drittes' then '3' else t end;
      t      
-------------
 Test
 Als zweites
 Als drittes
 Test2
 a
 m
 x
 y
(8 rows)

postgres=#
 
An CASE hatte ich auch gedacht, aber war der Meinung dass das eleganter möglich sein muss. Wie findest du die verlinkte Lösung? Ist doch relativ übersichtlich.
Ich benötige es, um die Datensätze der Tabelle auf einer Benutzeroberfläche in der bestimmten Reihenfolge anzuzeigen, und die ist nunmal nicht alphabetisch...
 
Ich hätte es auch mit CASE gemacht.

Wenn es mehr Werte werden würde ich mit einer Tabelle arbeiten, die kann auch on the fly erzeugt werden und somit direkt im Code stehen:
Code:
WITH sort(spalte,pos) AS (
SELECT 'Wert',1 UNION ALL
SELECT 'Als Zweites',2 UNION ALL
SELECT 'Als Drittes,3'
)
SELECT *
FROM tabelle
LEFT JOIN sort
ON tabelle.spalte = sort.spalte
ORDER BY sort.pos,tabelle.spalte

Deine gefundene Lösung finde ich witzig, aber nur solange ich sie nicht in meinem Code finde. Ich weiß nicht ob das in jedem SQL geht aber ich wäre nicht auf die Idee gekommen nach Bedingungen zu sortieren. Auch finde ich es alles andere als intuitiv mir Anhand der ORDER BY clause jetzt wieder vor Augen zu führen wie denn jetzt sortiert wird. Da verrenk ich mir das Hirn bei oder muss es erst aufschreiben.
 
Ich würde nur noch mal betonen, dass es meist sehr viel Sinn macht, eine Sortierung anhand bekannter Daten vorzunehmen. Bedeutet nichts anderes, als die Sortierfolge in/aus irgendeiner Spalte(n) des Datenmodells abzuleiten. Ist sie initial nicht vorhanden, kann man sie sicher ergänzen, auch als eigenständige Tabelle.
Daten in der DB sind immer änderbar, damit hast Du maximale Flexibilität. Erst dann käme die Änderung einer Order By Clause in einem Statement oder View. Auch das geht zumindest noch zentral, administrativ in der DB.
Also: es ist nicht ungewöhnlich, Sortierfolgen separat in dafür vorgesehenen Spalten zu führen.
 
Werbung:
Also: es ist nicht ungewöhnlich, Sortierfolgen separat in dafür vorgesehenen Spalten zu führen.
Stimme ich voll und ganz zu. Im Prinzip wäre eine eigene Sortiertabelle nur eine Normalisierung dieser Daten wenn z.B. jeder Datensatz eine Kategorie hat und dann nach Kategorie individuell sortiert werden soll dann lohnt sich bei wenigen Datensätzen eine eigene Spalte, normalisiert wäre das dann in einer eigenen Kategorie Tabelle gut mit unter gebracht.
 
Zurück
Oben