Beantwortet ERP-Teillieferungen und SQL-Code

  • Dienstag, 31. Juli 2012 15:04
     
     

    Hallo,

    ich stehe bei einem Kunden vor folgendem Problem. Die (vergangenheitsbezogene) ERP-Datenquelle sieht wie folgt aus:

    Wir haben zwischen AuftrNr <--> AuftrPos <--> FolgeNr eine n:m-Beziehung. Erkennbar werden dabei die AuftrPos 1 und 3 in Teillieferungen abgewickelt. Bisher werden in den Reports die Aufträge vollständig (s.o. Abb.) dargestellt, was diese unnötig aufbläht. Der Kunde wünscht nun eine Datenbasis, so dass jede AuftrPos pro Auftrag nur einmal vorkommt und zwar so:

    Es soll jeweils die max. FolgeNr (= max. Anzahl an Teilieferungen), die Bestellmenge der FolgeNr. = 0 (= tatsächliche Bestellmenge des Auftrags je Pos), die GelieferteMenge der Teillieferungen (= Summe der Teilgelieferten Mengen) und die offene Menge als min(OffeneMenge) ausgegeben werden. Mit dieser Datenablage lassen sich die Menge auch schön aggregieren.

    Ich suche nach einem SQL-Algorithmus, der nicht nur die Vergangenheit - wie oben gefordert - abbildet, sondern auch zukünftige Daten berücksichtigt kann (Achtung: die Anzahl an Teillieferungen ist nie im voraus bekannt!).

    Habt Ihr eine Idee, wie dass in SQL abgebildet werden kann? Beispielcode?

    Danke :)

    Gruß datamart72

Alle Antworten

  • Dienstag, 31. Juli 2012 16:02
    Moderator
     
     Beantwortet Enthält Code

    Entweder ich verstehs nicht oder ich verstehs nicht: Wie kann die AuftrPos 2 die FolgeNr 3 haben?

    Wenn ich die Zahlen halbwegs mit deiner Beschreibung in Einklang bringe:

    SELECT AuftrNr, 
           AuftrPos, 
           MAX(FolgeNr), 
           MAX(Bestellmenge), 
           SUM(GelieferteMenge), 
           MAX(Bestellmenge) - SUM(GelieferteMenge) 
    FROM   Tabellle 
    GROUP BY AuftrNr, 
           AuftrPos;
           

  • Mittwoch, 1. August 2012 20:13
     
     

    Hallo, Stefan,

    ja, da ist ein Zahlendreher drinnen: AuftrgPos = 1 mit FolgeNr = 3 und AuftrPos = 2 und FolgeNr = 0. 

    Das SQL bringt das gewünschte Ergebnis. Ich hatte bei mir ein Gruppierungsproblem, weil das ursprüngliche SQL noch umfangreicher war und zuviele Attribute im GROUP BY drinnen waren.  So bekam ich zu detaillierte Ergebnisse.

    Ganz herzlichen Dank :) & LG