SQL Select mit Unterabfrage?

mavnezz

Neuer Benutzer
Beiträge
3
Servus,

ich stehe auf dem Schlauch mit einer Abfrage. Bisher hab ich es Quick und Dirty gemacht und mit PHP gemacht, sprich pro Zeile eine weitere Abfrage gemacht. Schön und Performanter geht anders, ich weiß, deswegen meine Frage an euch.

Ich habe 2 Tabellen.

Tabelle 1 "Kunden": ID, CompanyID, Kundennummer, Kundenname
Tabelle 2 "Umsatz": ID, CompanyID, Kundennummer, Umsatz, Datum

Ausgabe soll sein:

Kunde 1; Kundenname; Umsatz_Tag_1; Umsatz_Tag_2; Umsatz_Tag_1 - Umsatz_Tag_2
Kunde 2; Kundenname; Umsatz_Tag_1; Umsatz_Tag_2; Umsatz_Tag_1 - Umsatz_Tag_2
Kunde n; Kundenname; Umsatz_Tag_1; Umsatz_Tag_2; Umsatz_Tag_1 - Umsatz_Tag_2

Sprich alle Kunden einer Firma sollen ausgegeben werden, mit einer Berechnung an 2 variablen Tagen.

Die beiden Tage und CompanyID werden vorher durch ein Formular ausgewählt.

Geht sowas direkt in SQL und performant umzusetzen?

Viele Grüße Julian
 
Werbung:
Code:
select k.kundenname, u1.umsatz, u2.umsatz, u1.umsatz - u2.umsatz
  from kunde k
  join umsatz u1 on k.kundennummer = u1.kundennumer
  join umsatz u2 on k.kundennummer = u2.kundennummer
 where u1.datum = :p1
   and u2.datum = :p2
alternativ könnte man zur Umsatzabfrage eine CTE verwenden.
 
$sql_kunden = "select k.kundenname, k.kundennummer, u1.betrag AS Tag1, u2.betrag AS Tag2, u2.betrag - u1.betrag AS Summe
from kunden k
left join kunden_umsatz u1 on k.kundennummer = u1.kundennummer
left join kunden_umsatz u2 on k.kundennummer = u2.kundennummer
where u1.data_at like '".formToSQL_NEW($_POST["start"],2)."%'
and u2.data_at like '".formToSQL_NEW($_POST["end"],2)."%'
and k.c_guid = '".$_POST["standort_id"]."'";

So hab ich das nun, das funktioniert auch, aber ich bekomme keine NULL werte angezeigt wenn es für einen Kunden am Tag keine Wert gibt. Schnell ist es auch ;)

Eine Idee?
 
Das nennt sich dann "left join" oder allgemeiner "outer join".
Wenn Du im SQL "join" durch "left join" ersetzt, dann bekommst Du auch NULL Werte, wenn in Umsatz keine passenden Daten vorhanden sind.
Du könntest natürlich auch mal ein paar Datenbank und SQL Grundlagen nachlesen.
 
Werbung:
Entschuldige, das habe ich nicht bemerkt. Dann liegt es vielleicht am Like und dem was Du da mit den Parametern machst. Kann ich leider nicht beurteilen, ich kann nur SQL. Ich würde das ganze als pures SQL testen. Oder mit fest eingetragenen Werten, von denen Du die Ergebnisse kennst.
Bei der gezeigten Verwendung stellt sich mir die Frage, was Datum für ein Typ ist, ich befürchte, kein Datumstyp. Like Operationen sind für String Typen.
 
Zurück
Oben