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

Summen aus 2 Tabellen gegenüberstellen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von HRGS85, 11 November 2014.

  1. HRGS85

    HRGS85 Benutzer

    Hi zusammen,

    ich habe eine Sales Tabelle und eine Retour Tabelle. In beiden stehen Artikelnummern und die Anzahl Sales bzw die Anzahl Retouren. Jetzt möchte ich beide Tabellen joinen und mir für jeden Artikel die Gesamtzahl Sales und die Anzahl Retouren anzeigen lassen.

    Bis jetzt habe ich folgendes Skript, was mir jedoch falsche Ergebnisse liefert:

    select s."No_", sum(s."Quantity"), sum(r."Quantity")

    from "Sales Invoice Line" s
    join "Return Receipt Line" r on s."No_" = r."No_"

    where r."Posting Date" between '2014-01-09' and '2014-31-10'group by s."No_"


    Die Anzahl s."Quantity" - also die Anzahl verkaufter Artikel - passt. Aber die Anzahl r."Quantity" - Anzahl Retouren - passt nicht und ist viel zu hoch.

    Jemand eine Idee?
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Du hast also:

    Code:
    test=*# select * from sales ;
     kunde | artikel
    -------+---------
      1 |  1
      1 |  2
      2 |  2
      2 |  3
    (4 rows)
    
    Time: 0,148 ms
    test=*# select * from retour ;
     kunde | artikel
    -------+---------
      1 |  2
      2 |  2
    (2 rows)
    
    Artikel 2 ist als echt Scheiße, gell?

    Code:
    test=*# select s.artikel, s.count, coalesce(r.count,0) from (select artikel, count(1) from sales group by artikel) s left join (select artikel, count(1) from retour group by artikel) r on s.artikel=r.artikel ;
     artikel | count | coalesce
    ---------+-------+----------
      1 |  1 |  0
      3 |  1 |  0
      2 |  2 |  2
    (3 rows)
    
     
  3. ukulele

    ukulele Datenbank-Guru

    Ich kann eigentlich keinen Grund erkennen warum das so ist. Dein JOIN irritiert mich aber etwas, soll das ein INNER JOIN sein? Dann muss aber zu jeder Invoice auch eine Retoure existieren, was ich erstmal für nicht sinnvoll halte aber so nicht beurteilen kann.
     
  4. Distrilec

    Distrilec Datenbank-Guru

    Ist "Posting Date" auch wirklich ein Date ? Oder ist das als String gespeichert ?
    Wenn es als String gespeichert ist, ist das der Fehler. -> '2014-31-01', '2014-31-02', etc. ist dann auch mit inbehalten...
    Wenn man Date's als String speichert, sollte man immer das YYYY-MM-DD Format benutzen um so etwas zu verhindern :)
     
  5. akretschmer

    akretschmer Datenbank-Guru

    ... das sein lassen und DATE nutzen.
     
  6. Distrilec

    Distrilec Datenbank-Guru

    Richtig... Aber ich dachte das sei selbsterklärend :)
    Ob es taktisch klug ist, wurde hier ja aber auch nicht gefragt
     
  7. ukulele

    ukulele Datenbank-Guru

    Ich weis auch nicht ob es Sinn macht r.PostingDate einzuschränken ohne das InvoiceDatum auch einzuschränken. Und was ist mit Verkäufen, die vor dem Datum oder Zeitraum statt gefunden haben wo aber die Retoure nach in den ausgewählten Zeitraum fällt?
     
  8. Distrilec

    Distrilec Datenbank-Guru

    Anscheinend ist das so aber gewollt... Alle Invoice Lines und die Retoure in einem gewissen Zeitraum.
    Zumindest sagte er, dass das Ergebnis der Invoice Lines so passt
     
  9. ukulele

    ukulele Datenbank-Guru

    Bei einem INNER JOIN würden nicht alle InvoiceLines ausgegeben sondern nur diejenigen, zu denen es auch eine Retoure in dem Zeitraum gibt. Ob das Sinn macht weiß ich nicht :)
     
  10. Distrilec

    Distrilec Datenbank-Guru

    Oh... Ja, richtig :D
    @HRGS85 : Vllt. wäre es ne Idee zu erfahren was du eig. mit deinem Select bezwecken willst ?
    Kollektive Verwirrung ist nie ein gutes Zeichen.
     
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