Vielen Dank für die schnelle Antwort. Bei der Berechnung der Spalte "Einkaufspreis Gesamt" stimmt aber was nicht (siehe Bild). Zu sehen sind die einzigen Schuhpaare, die wir haben.Moin Jonas,
hier einmal die Abfrage (Nur Hauptzustand) mit Lagerplätzen. Dabei wird jeder Artikel pro lagerplatz in eine Zeile geschreiben.
Ich hoffe das reicht dir aus.
Den Anhang 122569 betrachten
Einfach als neues Profil hinzufügen und dann auf "OK" klicken. Im Anschluss das Programm bitte einmal schließen und neu öffnen und ausführen.
SQL:/* Profil: NUR Hauptzustände – je Lagerplatz Nur lesende Befehle • Kompatibel ab SQL Server 2017+ (wegen STRING_AGG) */ /* 1) Bestände je Lagerplatz ------------------------------------ */ ;WITH PlatzSummen AS ( SELECT E.kArtikel, LP.kWarenLager, LP.cName AS Lagerplatz, SUM(ISNULL(E.fAnzahl,0) - ISNULL(A.fAnzahl,0)) AS BestandPlatz FROM dbo.tWarenLagerEingang E JOIN dbo.tWarenLagerPlatz LP ON LP.kWarenLagerPlatz = E.kWarenLagerPlatz LEFT JOIN dbo.tWarenLagerAusgang A ON A.kWarenLagerEingang = E.kWarenLagerEingang WHERE LP.kWarenLager = @warehouse AND E.dErstellt < DATEADD(day,1,@date) GROUP BY E.kArtikel, LP.kWarenLager, LP.cName HAVING SUM(ISNULL(E.fAnzahl,0) - ISNULL(A.fAnzahl,0)) > 0 ), /* 2) artikelweiter Bestand + Einkaufssumme ----------------------- */ ArtikelGesamt AS ( SELECT E.kArtikel, LP.kWarenLager, SUM(ISNULL(E.fAnzahl,0) - ISNULL(A.fAnzahl,0)) AS GesamtBestand, SUM((ISNULL(E.fAnzahl,0) - ISNULL(A.fAnzahl,0)) * Art.fEKNetto) AS GesamtEK FROM dbo.tWarenLagerEingang E JOIN dbo.tWarenLagerPlatz LP ON LP.kWarenLagerPlatz = E.kWarenLagerPlatz LEFT JOIN dbo.tWarenLagerAusgang A ON A.kWarenLagerEingang = E.kWarenLagerEingang JOIN dbo.tArtikel Art ON Art.kArtikel = E.kArtikel WHERE LP.kWarenLager = @warehouse AND E.dErstellt < DATEADD(day,1,@date) GROUP BY E.kArtikel, LP.kWarenLager HAVING SUM(ISNULL(E.fAnzahl,0) - ISNULL(A.fAnzahl,0)) > 0 ) SELECT Art.cArtNr AS Artikelnummer, MAX(AB.cName) AS Artikelname, MAX(ESVerk.cName) AS Verkaufseinheit, MAX(ISNULL(Art.fMassMenge,1)) AS InhaltMenge, MAX(MES.cName) AS InhaltEinheit, /* Einkaufspreis für **diesen Platz** */ SUM(Platz.BestandPlatz * ISNULL(Art.fEKNetto,0)) AS [Einkaufspreis Gesamt], /* Ø-EK artikelweit (wieder wie früher) */ CASE WHEN AG.GesamtBestand <> 0 THEN AG.GesamtEK / AG.GesamtBestand ELSE 0 END AS [Durchschnittlicher EK Einzel], Platz.BestandPlatz AS BestandPlatz, WL.cName AS Lager, Platz.Lagerplatz AS Lagerplatz, MAX(E.dGeliefertAm) AS [Letztes Lieferdatum] FROM PlatzSummen Platz JOIN dbo.tArtikel Art ON Art.kArtikel = Platz.kArtikel JOIN dbo.tWarenLager WL ON WL.kWarenLager = Platz.kWarenLager JOIN ArtikelGesamt AG ON AG.kArtikel = Platz.kArtikel AND AG.kWarenLager = Platz.kWarenLager /* beliebige Wareneingangszeile, nur fürs Lieferdatum */ LEFT JOIN dbo.tWarenLagerEingang E ON E.kArtikel = Platz.kArtikel AND E.kWarenLagerPlatz IN ( SELECT kWarenLagerPlatz FROM dbo.tWarenLagerPlatz WHERE kWarenLager = @warehouse AND cName = Platz.Lagerplatz) -- Beschreibung (1 Zeile pro Artikel & Sprache) LEFT JOIN dbo.tSpracheUsed SU ON SU.nStandard = 1 LEFT JOIN dbo.tArtikelBeschreibung AB ON AB.kArtikel = Art.kArtikel AND AB.kSprache = SU.kSprache AND AB.kPlattform = 1 -- Verkaufseinheit LEFT JOIN dbo.tEinheit EV ON Art.kVerkaufsEinheit = EV.kEinheit LEFT JOIN dbo.tEinheitSprache ESVerk ON ESVerk.kEinheit = EV.kEinheit AND ESVerk.kSprache = 1 -- Masseinheit LEFT JOIN dbo.tMassEinheit ME ON Art.kMassEinheit = ME.kMassEinheit LEFT JOIN dbo.tMassEinheitSprache MES ON MES.kMassEinheit = ME.kMassEinheit AND MES.kSprache = 1 WHERE Art.cArtNr NOT LIKE '%brauchbar' AND Art.cArtNr NOT LIKE '%defekt' AND Art.cArtNr NOT LIKE '%verpackung' GROUP BY Art.cArtNr, WL.cName, Platz.Lagerplatz, Platz.BestandPlatz, AG.GesamtBestand, AG.GesamtEK ORDER BY Art.cArtNr, Platz.Lagerplatz;
Gruß
Und im besten Fall bräuchten wir alle Artikelzustände, da die Teil unseres Lagers sind.
LG
Jonas