Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL Verschiedene ORDER BY - Werte (https://www.delphipraxis.net/86219-sql-verschiedene-order-werte.html)

Wuaegner 11. Feb 2007 11:02

Datenbank: SQL • Zugriff über: MySQL

SQL Verschiedene ORDER BY - Werte
 
Hallo,

ich habe eine Tabelle "Aufgaben" mit unter anderem den Spalten: "erledigt("erledigt"|"unerledigt")" und "Datum". Jetzt möchte ich gern eine SQL-Abfrage bauen, welche mir die Ergebnisse erst einmal nach erledigten und unerledigten Aufgaben sortiert ( ORDER BY `erledigt` DESC ) und zusätzlich, ( jetzt kommt das Problem ) , sollen die unerledigten Aufgaben AUFSTEIGEND und die erledigten Aufgaben ABSTEIGEND nach jeweils dem Datum sortiert werden. Hat jemand eine Idee ?


Mfg Flo

mkinzler 11. Feb 2007 11:19

Re: SQL Verschiedene ORDER BY - Werte
 
Wäre mit einem UNION möglich

Wuaegner 11. Feb 2007 11:28

Re: SQL Verschiedene ORDER BY - Werte
 
Wie sähe der UNION Befehl aus um unterschiedlich zu sortieren? Habe kein UNION Beispiel mit unterschiedlichen ORDER BY- Befehlen gefunden...

mkinzler 11. Feb 2007 11:32

Re: SQL Verschiedene ORDER BY - Werte
 
Das kommt auf die Datenbank an, ob sie das unterstützt.

Wuaegner 11. Feb 2007 11:41

Re: SQL Verschiedene ORDER BY - Werte
 
Und wie sähe das SQL-Statement aus? ( Würde es dann testen )

mkinzler 11. Feb 2007 11:47

Re: SQL Verschiedene ORDER BY - Werte
 
Einfach die beiden Teilqueries mit Union zusammenhängen

SQL-Code:
select * from <tabelle> where erledigt order by datum desc
union
select * from <tabelle> where not erledigt order by datum asc;
Alternativ kann man auch ne SP schreiben.

marabu 16. Jul 2007 13:16

Re: SQL Verschiedene ORDER BY - Werte
 
Hallo,

der Thread ist schon älter, aber ich bin jetzt erst darüber gestolpert.

Sollte der SQL-Parser die ORDER BY Klausel bei Sets zulassen, die Teil einer UNION sind, dann wäre spätestens das Ergebnis wieder ungeordnet, da sich die Anordnung der Tupel in einem Result Set ohne ORDER BY von Lauf zu Lauf ändern darf.

MYSQL5 stellt aber durchaus sprachliche Möglichkeiten zur Verfügung, mit denen man das Problem lösen kann:

SQL-Code:
select * from aufgaben
order by erledigt desc, if(erledigt='erledigt', - CAST(datum as signed), CAST(datum as signed))
Die gewünschte Ordnung für das erste Sortierkriterium ist missverständlich formuliert und muss entsprechend angepasst werden.

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz