Liebe/-r Experte/-in,
ich habe ein Problemchen und dazu bräuchte ich Deine Hilfe. Für die Mühe bedanke ich mich schon mal im vorraus.
Für unseren Verein programmiere ich gerade eine Fahrtkostenverwaltung.
Dazu habe ich die Tabelle Fahrtkosten mit id, datum, km und grund gebaut.
Bei Grund habe ich 3 Zustände. Einmal keine FK 999 (Übungsleitter stellt keine Forderung, fürs FA müssen die aber trotzdem erfasst werden) 998 für Kurz-Fahrten zB um im Freibad einen Stand auf zu bauen.
Der Rest ist für Fahrten die normal/korrekt abgerechnet werden.
Nun habe ich einen Filter eingebaut, wo ich Quartal und Jahr oder jeweils Alle wählen kann.
In der Übersicht habe ich dann folgendes sql-Statement:
SELECT 2*SUM(IF(grund=‚999‘, km,0)) AS keinefahrtkosten,
2*SUM(IF(grund=‚998‘, km,0)) AS werbungsfahrtkosten,2*SUM(IF(grund!=‚998’and grund!=‚999‘, km,0)) AS normalfahrtkosten FROM fahrtkosten where if(".$quartal."=0,1,quarter(fahrtkosten.datum)=".$quartal.") and if($jahr=0,1,Date_Format(fahrtkosten.datum,‘%Y’) = ‚".$jahr."‘)
Klappt soweit im Normalfall.
Nun möchte ich den Fall abfangen, dass keien Daten in der DB sind (Bsp 3 Quartal 2010 oder 1. Quartal 2008)
if(mysql_num_rows($ms_fahrtkosten)==0 )
echo „Für den gewählten Zeittraum sind keine Fahrtkosten erfasst.“;
else
{
while($ausgabe_fahrtkosten=mysql_fetch_assoc($ms_fahrtkosten))
{…
Und da sitzt der Knackpunkt. sum() liefert mir bei fehlenden Daten eine Zeile mit „NULL“
Den Filter für die Jahre kann ich zwar aus der DB generieren, aber die Quartale nicht ohne weiteres.
Sonst müsste ich jedesmal nachfragen, ob das Quartal des gewählten Jahres existiert und ob da Werte drin sind.
Kann ich irgendwie die NULL abfangen? Also sowas wie in Excel summewenn…
Mit einem group by komme ich nicht weiter. Als Ergebnis möchte ich halt max. drei Zeilen haben:
Werbungsfahrtkosten: 120€
Keine Fahrtkosten: 12€
normale fahrtkosten 1222€
Gruß aus T
Oliver