Announcement

Collapse
No announcement yet.

Hilfe bei einer SQL Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hilfe bei einer SQL Abfrage

    Hallo Zusammen,

    ich benötige Hilfe bei einer SQL Abfrage und hoffe, dass ich hier richtig bin. Also entweder stehe ich gerade auf dem Schlauch oder ich bin einfach zu blöd :-)

    Ich soll bei uns in der Firma eine Abfrage machen. Und zwar gibt es bei uns eine Tabelle in der Materialbuchungen verzeichnet sind. Hier unterscheidet man Inventur- und Produktionsabgangsbuchungen. Nun soll ich abfragen, wieviel Material seit der letzten Inventurbuchung durch Produktionsabgangsbuchungen abgebucht wurden.
    Aber wie mache ich das am Besten? Wie kann ich abfragen, wann die letzte Inventurbuchung gemacht wurde und wie kann ich dann sagen, dass er nur die Produktionsabgangsbuchungs seit der letzten Inventurbuchung summieren soll?

    Hoffe es kann mir jemand weiterhelfen!

    Vielen Dank, Marcel

  • #2
    Hallo,

    sollte ja eigentlich nicht weiter schwierig sein.
    Die letzte Inventurbuchung ist das größte (max()) Datum aller Inventurbuchungen. Der Materialabgang ist dann die Summe (sum()) an Material, das mit einem Datum größer als letzte Inventurbuchung gebucht wurde.

    Da du keine Angaben zu deinem Datenmodell gemacht hast, mal als Pseudo-SQL:
    [highlight=sql]
    select sum(material)
    from buchungen
    where produktionsabgang
    and datum > (
    select max(datum)
    from buchungen
    where inventurbuchung
    )
    [/highlight]

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Au mann, ja klar. Vielen Dank! Hab da komplett in die falsche Richtung gedacht!

      Comment


      • #4
        Nächstes Problem :-)

        Ich bekomme jetzt zwar die richtigen Ergebnisse, allerdings zeigt er mir jetzt jede Buchung einzeln auf, obwohl ich mit der Aggregatfunktion summiert habe...

        Ich möchte nämlich für einen Artikel nur eine Zeile rausbekommen. Also dass er nicht für jedes Datum eine eigene Zeile ausgibt sondern als Datumsangaben zusammenfasst

        Habe auch schon mit select distinct versucht hat aber nicht gebracht...

        Hier mal der Code:

        select a.ArtikelNr, a.Bez1, sum(mb.Mg) as Menge, mb.DatumBuchung
        from OpArtikel a, OpMaterialBewegung mb
        where a.Suchbegriff = 'EK'
        and mb.BuchungsArt = '800'
        and DatumBuchung > (Select max(DatumBuchung) from OpMaterialBewegung where Buchungsart = '199')
        and a.ArtikelId = mb.ArtikelId
        group by a.ArtikelNr, a.Bez1, mb.DatumBuchung
        order by a.ArtikelNr

        Als Beispiel:

        ArtikelNr Bezeichnung Menge DatumBuchung

        BE 002 Becheretikett -23160.0000 2009-08-25 00:00:00
        BE 002 Becheretikett -2760.0000 2009-08-26 00:00:00
        Zuletzt editiert von Marcel84; 27.08.2009, 13:53.

        Comment


        • #5
          Hab selber gefunden, also heute steht ich echt auf dem Schlauch, ist ja klar, dass ich das Datum nicht mitselektieren darf...

          Comment


          • #6
            Hallo,

            ich brauche doch noch einmal eure Hilfe, irgendwie bekomme ich hier nicht die richtigen Ergebnisse.

            Diese oben genannte Abfrage sucht mir leider nur die letzte Inventurbuchung (199) heraus und summiert von dort an die Produktionsabgangsbuchungen (800). Das Problem ist aber, dass ich das für jeden Artikel spezifisch benötige.

            Das heisst, wenn zum Beispiel heute um 12 Uhr die letze 199er Buchung war und danach keine Buchung mehr bringt er überhaupt keine Ergebnisse, obwohl zb. vom Artikel A die letzte 199er Buchung vor 2 Monaten war...

            Ich will eigentlich abfragen:

            suche mir von Artikel A die letzte 199er Buchung und summiere von dort an alle 800er Buchungen
            selbiges für Artikel B, C, D, usw....

            so wie es jetzt ist sucht er generell nach der letzten 199er Buchung egal von welchem Artikel...

            Ich hoffe ich habe das verständlich erklärt :-)

            Comment


            • #7
              Hallo,

              dann brauchst du das Ganze doch nur um die Artikel erweitern:

              [highlight=sql]
              SELECT a.artikel, sum(a.material)
              FROM buchungen a
              WHERE a.produktionsabgang
              AND a.datum > (
              SELECT max(b.datum)
              FROM buchungen b
              WHERE b.inventurbuchung
              AND b.artikel = a.artikel
              )
              GROUP BY a.artikel
              [/highlight]

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Super, Danke!! Ich selber hatte zwar auch schon einen Join im Subselect, allerdings hatte ich falsch gejoint und zwar hatte ich: a.ArtikelId = mb.ArtikelId diesen Join nochmals im Subselect eingefügt...

                Comment

                Working...
                X