Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SQL Select mit Unterabfrage?

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von mavnezz, 19 August 2020.

  1. mavnezz

    mavnezz Neuer Benutzer

    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
     
  2. dabadepdu

    dabadepdu Datenbank-Guru

    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.
     
  3. mavnezz

    mavnezz Neuer Benutzer

    $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?
     
  4. dabadepdu

    dabadepdu Datenbank-Guru

    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.
     
  5. mavnezz

    mavnezz Neuer Benutzer

    Wie du in meiner Antwort siehst, habe ich eine left join probiert, leider keine null Werte.

    Danke
     
  6. dabadepdu

    dabadepdu Datenbank-Guru

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden