Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

ORDER BY über mehrere Spalten

Frage Entwicklung PHP

Mitglied: helmuthelmut2000

helmuthelmut2000 (Level 2) - Jetzt verbinden

11.12.2011 um 13:37 Uhr, 4765 Aufrufe, 6 Kommentare

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?
Mitglied: Berrnd
11.12.2011 um 15:46 Uhr
Hi,

ja, Beispiel: ;)
01.
select * 
02.
from dbo.test1 
03.
order by coalesce(Datum1, Datum2, Datum3)
Die Funktion COALESCE nimmt den ersten Wert, der nicht NULL ist.
Siehe http://msdn.microsoft.com/en-en/library/ms190349.aspx

Gruß - Bernd
Bitte warten ..
Mitglied: Biber
11.12.2011 um 15:50 Uhr
Moin helmuthelmut2000,

Rückfrage:
kann denn immer nur eine der Datumsspalten NOT NULL sein oder können dort auch z.B alle drei Spalten einen Datumswert beinhalten?

Grüße
Biber
Bitte warten ..
Mitglied: helmuthelmut2000
11.12.2011 um 19:42 Uhr
Hallo Biber,

Ja es können auch z.B. alle drei Spalten einen Datumswert haben.

Grüße Helmut
Bitte warten ..
Mitglied: helmuthelmut2000
12.12.2011 um 13:55 Uhr
Hallo,

Ich kann das auch so machen das immer nur in einer Spalte ein Datumswert ist.

Gibts dann eine Lösung?
Bitte warten ..
Mitglied: Biber
12.12.2011 um 15:09 Uhr
Moin helmuthelmut2000,

es gibt für alles eine Lösung

  • Wenn nur eine der drei Spalten ungleich NULL ist, dann passt Bernd-'s Lösung.
Fertig, Haken dran, gut is'.

  • wenn keine, eine, zwei oder drei mit Datumswerten gefüllt sein können
- UND-
  • vom ältesten zum "höchsten" Datum sortiert ausgeben werden soll
- UND-
  • die NULL-Werte aber "als Letztes" in der Sortierreihenfolge erscheinen sollen, dann wird es ein bisschen unappetitlich.

Ich versuch mal eine Skizze
01.
-- hier mal ein Access-SQL, falls kein MSSQL griffbereit 
02.
select  name, vorname, datum1, datum2, datum3 from  ( 
03.
SELECT name, vorname, datum1, datum2, datum3 
04.
                        ,  IIF( IsNull(datum1), date() + 1000 , datum1) as a 
05.
                        ,  IIF( IsNull(datum2), date() + 1000 , datum2) as b 
06.
                        ,  IIF( IsNull(datum3), date() + 1000 , datum3) as c 
07.
FROM Helmuthelmut2000 
08.
09.
order by IIf( a <= b and a<= c, a, IIF( b<=a and b<=c, b,c)) 
10.
;
Hier dasselbe als MSSQL
01.
select  name, vorname, datum1, datum2, datum3 from ( 
02.
SELECT name, vorname, datum1, datum2, datum3 
03.
                        ,  coalesce(datum1, dateadd(dd,1000,getdate()) ) as a 
04.
                        ,  coalesce(datum2, dateadd(dd,1000,getdate())) as b 
05.
                        ,  coalesce(datum3, dateadd(dd,1000,getdate())) as c 
06.
FROM Helmuthelmut2000 
07.
08.
order by CASE 
09.
        WHEN (a <= b and a<= c) THEN a 
10.
        WHEN ( b<=a and b<=c)  THEN b 
11.
        ELSE c 
12.
        END 
13.
;
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
Bitte warten ..
Mitglied: Biber
31.12.2011 um 16:31 Uhr
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
Bitte warten ..
Ähnliche Inhalte
Neue Wissensbeiträge
Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(9)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(6)

Anleitung von BassFishFox zum Thema Windows 10 ...

Heiß diskutierte Inhalte