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, 4719 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 ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
VB for Applications
Mehrere Spalten Durchsuchen und Ergebnisse in neuer Tabelle Ausgeben (3)

Frage von Mr.Green zum Thema VB for Applications ...

Datenbanken
gelöst SSIS - Group By und MAX von String-Spalten (2)

Frage von batpoint zum Thema Datenbanken ...

LAN, WAN, Wireless
Mehrere Hardware Firewalls (10)

Frage von cerberus90 zum Thema LAN, WAN, Wireless ...

VB for Applications
gelöst Excel VBA Eine oder mehrere Zellen Verschieben (2)

Frage von batchnewbie zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...