Announcement

Collapse
No announcement yet.

Brauche Hilfe bei einer speziellen Abfrage T-SQL

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

  • Brauche Hilfe bei einer speziellen Abfrage T-SQL

    Hallo zusammen,

    ich mache mir gerade eine Abfrage im SQL-Server Managment Studio, um eine Verbrauchsstatistik aus unserem ERP System zu bekommen. Leider komme ich nicht wirklich weiter.

    In einer Tabelle "lagerbewegungen" werden sämtliche Lager Zugänge und Abgänge protokolliert. Aus dieser Tabelle möchte ich eine Statistik ausgegeben bekommen die wie folgt aussieht.

    Artikel | Jahr | Monat | Abgänge | Zugänge
    Pro08n | 2010 | Januar | 5200.50 | 5461.00
    Pro08n | 2010 | Februar | 6558.62 | 6025.00
    Pro08n | 2010 | März | 6097.80 | 6591.00
    Pro08n | 2010 | April | 8909.16 | 8011.98
    Pro08n | 2010 | Mai | 5312.14 | 5460.00
    Pro08n | 2010 | Juni | 5728.14 | 6825.00
    Pro08n | 2010 | Juli | 4251.02 | 2730.00
    Pro08n | 2010 | August | 5761.53 | 6999.00
    Pro08n | 2010 | September | 6467.30 | 6370.00
    Pro08n | 2010 | Oktober | 9840.13 | 10921.10
    Pro08n | 2010 | November | 2772.94 | 3640.00
    Pro06n | 2010 | Januar | 5200.50 | 5461.00
    Pro06n | 2010 | Februar | 6558.62 | 6025.00
    Pro06n | 2010 | März | 6097.80 | 6591.00
    Pro06n | 2010 | April | 8909.16 | 8011.98
    Pro06n | 2010 | Mai | 5312.14 | 5460.00
    Pro06n | 2010 | Juni | 5728.14 | 6825.00
    Pro06n | 2010 | Juli | 4251.02 | 2730.00
    Pro06n | 2010 | August | 5761.53 | 6999.00
    Pro06n | 2010 | September | 6467.30 | 6370.00
    Pro06n | 2010 | Oktober | 9840.13 | 10921.10
    Pro06n | 2010 | November | 2772.94 | 3640.00
    Pro14n | 2010 | Januar | 5200.50 | 5461.00
    Pro14n | 2010 | Februar | 6558.62 | 6025.00
    Pro14n | 2010 | März | 6097.80 | 6591.00
    Pro14n | 2010 | April | 8909.16 | 8011.98
    Pro14n | 2010 | Mai | 5312.14 | 5460.00
    Pro14n | 2010 | Juni | 5728.14 | 6825.00
    Pro14n | 2010 | Juli | 4251.02 | 2730.00
    Pro14n | 2010 | August | 5761.53 | 6999.00
    Pro14n | 2010 | September | 6467.30 | 6370.00
    Pro14n | 2010 | Oktober | 9840.13 | 10921.10
    Pro14n | 2010 | November | 2772.94 | 3640.00


    Die Tabelle "lagerbewegungen" hat folgende Spalten:

    Artikel | Menge | Datum

    Die Zu- und Abgänge (Menge) unterscheiden sich nur durch ein Minus vor der Zahl.
    Ein Teilabfrage hab ich schon hin bekommen, aber am Rest verzweifel ich.....



    Abfrage für Abgänge:

    select DATENAME(MONTH, datum) as Monat, Abgang=sum(Menge)*-1
    from lagerbewegungen
    where datum >= '01.01.2010' and datum <= '31.12.2010' and artikel = 'pro08n' and menge like '-%'
    GROUP BY DATENAME(MONTH, datum)
    order by max(MONTH(datum))


    Hoffe ihr könnt mir helfen.

    Gruß und Danke im vorraus

  • #2
    Hallo,

    du könntest ein CASE-WHEN-Konstrukt für die Summierung verwenden.

    Mal ne Frage: ...menge like '-%' um negative Werte zu filtern ist nicht dein Ernst oder?

    Hinweis: Formatierung von SQL in Beiträgen

    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
      Gute Idee mit dem Case when, das könnte funktionieren.

      Aber wie bekomme ich die Gruppierung hin? Die Zugänge sollen in einer Spalte nach Monat gruppiert werden und die Abgänge in einer weiteren auch nach Monat. Das ganze soll dann noch nach Jahr und dann nach Artikel gruppiert werden.

      Ähnlich wie im ersten eintrag

      Mir fällt gerade leider nichts anderes ein wie menge like '-%'. Was gibt es den sonst für eine Möglichkeit?

      Danke und Gruß

      Comment


      • #4
        ohne test
        [HIGHLIGHT="SQL"]SELECT artikel
        , YEAR (Datum) AS jahr
        , DATENAME(MONTH, datum) AS Monat
        , SUM (CASE WHEN Menge > 0 THEN Menge ELSE 0 END) AS Zugang
        , SUM (CASE WHEN Menge < 0 THEN Menge ELSE 0 END) AS Abgang
        FROM lagerbewegungen
        WHERE datum >= '01.01.2010' and datum <= '31.12.2010'
        GROUP BY artikel
        , YEAR (Datum)
        , DATENAME(MONTH, datum)
        ORDER BY artikel
        , YEAR (Datum)
        , MONTH(datum)[/HIGHLIGHT]

        Comment


        • #5
          Wow super. Aber so simpel

          Ich glaub da hab ich etwas auf dem Schlauch gestanden.

          Vielen Dank ebis!!!!! Musste nur noch in der Order by das Datum in die Max() Funktion setzten "ORDER BY artikel, YEAR (max(Datum)), MONTH(max(datum))", dann ging's.

          Vielen Dank. Gruß

          Comment

          Working...
          X