ORDER BY über mehrere Spalten
Hallo,
Ich habe eine PHP-Seite die Daten aus einer MSSQL-DB auslesen soll.
Dort habe ich mehrere Spalten:
Name, Vorname, Datum1, Datum2, Datum3.
Mayer, Hans, 12.12.2011, NULL, NULL.
Müller, Peter, NULL, 06.12.2011,NULL.
Wagner, Peter, NULL, NULL, 07.12.2011.
Jetzt sollte die Sortierung so kommen:
Name, Vorname, Datum1, Datum2, Datum3.
Müller, Peter, NULL, 06.12.2011,NULL.
Wagner, Peter, NULL, NULL, 07.12.2011.
Mayer, Hans, 12.12.2011, NULL, NULL.
Es sollte nach Datum über mehrere Spalten Sortiert werden.
Geht das noch mit ORDER BY?
Ich habe eine PHP-Seite die Daten aus einer MSSQL-DB auslesen soll.
Dort habe ich mehrere Spalten:
Name, Vorname, Datum1, Datum2, Datum3.
Mayer, Hans, 12.12.2011, NULL, NULL.
Müller, Peter, NULL, 06.12.2011,NULL.
Wagner, Peter, NULL, NULL, 07.12.2011.
Jetzt sollte die Sortierung so kommen:
Name, Vorname, Datum1, Datum2, Datum3.
Müller, Peter, NULL, 06.12.2011,NULL.
Wagner, Peter, NULL, NULL, 07.12.2011.
Mayer, Hans, 12.12.2011, NULL, NULL.
Es sollte nach Datum über mehrere Spalten Sortiert werden.
Geht das noch mit ORDER BY?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 177543
Url: https://administrator.de/contentid/177543
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
6 Kommentare
Neuester Kommentar
Hi,
ja, Beispiel: ;)
Die Funktion COALESCE nimmt den ersten Wert, der nicht NULL ist.
Siehe http://msdn.microsoft.com/en-en/library/ms190349.aspx
Gruß - Bernd
ja, Beispiel: ;)
select *
from dbo.test1
order by coalesce(Datum1, Datum2, Datum3)
Siehe http://msdn.microsoft.com/en-en/library/ms190349.aspx
Gruß - Bernd
Moin helmuthelmut2000,
es gibt für alles eine Lösung
Ich versuch mal eine Skizze
Hier dasselbe als MSSQL
Da ein Datumswert von NULL in deiner Sortirung ja als "der höchste" erscheinen soll, habe ich NULL übersetzt mit Heute plus 1000 Tage.
Wegen der Lesbarkeit habe ich Pseudospalten a, b, c eingefügt, wesentlich ist das ORDER BY IIF/CASE WHEN... in der letzten Zeile.
[Edit] Bei MSSQL-Variante auf Dateadd() und CASE WHEN...END geändert [/Edit]
Grüße
Biber
es gibt für alles eine Lösung
- Wenn nur eine der drei Spalten ungleich NULL ist, dann passt Bernd-'s Lösung.
- wenn keine, eine, zwei oder drei mit Datumswerten gefüllt sein können
- vom ältesten zum "höchsten" Datum sortiert ausgeben werden soll
- die NULL-Werte aber "als Letztes" in der Sortierreihenfolge erscheinen sollen, dann wird es ein bisschen unappetitlich.
Ich versuch mal eine Skizze
-- hier mal ein Access-SQL, falls kein MSSQL griffbereit
select name, vorname, datum1, datum2, datum3 from (
SELECT name, vorname, datum1, datum2, datum3
, IIF( IsNull(datum1), date() + 1000 , datum1) as a
, IIF( IsNull(datum2), date() + 1000 , datum2) as b
, IIF( IsNull(datum3), date() + 1000 , datum3) as c
FROM Helmuthelmut2000
)
order by IIf( a <= b and a<= c, a, IIF( b<=a and b<=c, b,c))
;
select name, vorname, datum1, datum2, datum3 from (
SELECT name, vorname, datum1, datum2, datum3
, coalesce(datum1, dateadd(dd,1000,getdate()) ) as a
, coalesce(datum2, dateadd(dd,1000,getdate())) as b
, coalesce(datum3, dateadd(dd,1000,getdate())) as c
FROM Helmuthelmut2000
)
order by CASE
WHEN (a <= b and a<= c) THEN a
WHEN ( b<=a and b<=c) THEN b
ELSE c
END
;
Da ein Datumswert von NULL in deiner Sortirung ja als "der höchste" erscheinen soll, habe ich NULL übersetzt mit Heute plus 1000 Tage.
Wegen der Lesbarkeit habe ich Pseudospalten a, b, c eingefügt, wesentlich ist das ORDER BY IIF/CASE WHEN... in der letzten Zeile.
[Edit] Bei MSSQL-Variante auf Dateadd() und CASE WHEN...END geändert [/Edit]
Grüße
Biber
Moin helmuthelmut2000,
es gibt so viele ungeklärte Fragen auf dieser Welt...
Werden die Zuschauer Guttenberg als Wetten-dass-Moderator akzeptieren?
Kann Angie die Hosenanzug-Industrie aus der Krise führen?
Werden dank Alfons Schubeck die Klopsbratereien mehr Umsatz oder einen Anstieg der VegatarierInnen bewirken?
Können wir dann wenigstens dein relativ übersichtliches Problemchen abhaken?
Grüße
Biber
es gibt so viele ungeklärte Fragen auf dieser Welt...
Werden die Zuschauer Guttenberg als Wetten-dass-Moderator akzeptieren?
Kann Angie die Hosenanzug-Industrie aus der Krise führen?
Werden dank Alfons Schubeck die Klopsbratereien mehr Umsatz oder einen Anstieg der VegatarierInnen bewirken?
Können wir dann wenigstens dein relativ übersichtliches Problemchen abhaken?
Grüße
Biber