Eigene Übersicht: Artikelmengen je Lager – sauber gruppiert & ohne Doppelzählung
Probleme in der Vorlage:
kWarenlager
ist numerisch → nicht mit'2'/'3'
vergleichen.Join auf Bestände multipliziert Zeilen → zuerst pro Artikel aggregieren, dann joinen.
Nicht nach
fAnzahl
gruppieren, sondern summieren.
Korrektur (robust):
WITH Pos AS (
SELECT
Verkauf.tAuftragPosition.kArtikel,
Verkauf.tAuftragPosition.cArtNr,
SUM(Verkauf.tAuftragPosition.fAnzahl) AS Menge
FROM Verkauf.tAuftragPosition
WHERE Verkauf.tAuftragPosition.kAuftrag = @key
GROUP BY Verkauf.tAuftragPosition.kArtikel, Verkauf.tAuftragPosition.cArtNr
),
Bestand AS (
SELECT
dbo.tlagerbestandProLagerLagerartikel.kArtikel,
SUM(CASE WHEN dbo.tlagerbestandProLagerLagerartikel.kWarenlager = 2
THEN dbo.tlagerbestandProLagerLagerartikel.fBestand ELSE 0 END) AS Hauptlager,
SUM(CASE WHEN dbo.tlagerbestandProLagerLagerartikel.kWarenlager = 3
THEN dbo.tlagerbestandProLagerLagerartikel.fBestand ELSE 0 END) AS Ladenlager
FROM dbo.tlagerbestandProLagerLagerartikel
GROUP BY dbo.tlagerbestandProLagerLagerartikel.kArtikel
)
SELECT
Pos.cArtNr AS Artikelnummer,
CAST(Pos.Menge AS DECIMAL(10, 2)) AS Menge,
CAST(ISNULL(Bestand.Hauptlager, 0) AS DECIMAL(10, 2)) AS Hauptlager,
CAST(ISNULL(Bestand.Ladenlager, 0) AS DECIMAL(10, 2)) AS Ladenlager
FROM Pos
LEFT JOIN Bestand
ON Bestand.kArtikel = Pos.kArtikel;
Kurz erklärt:
Pos
: fasst Auftragspositionen pro Artikel zusammen (SUM(fAnzahl)
).Bestand
: summiert je Artikel die Lagerbestände für Lager 2 und 3.LEFT JOIN
: zeigt auch Artikel ohne Bestandszeile.Einheitliche Ausgabe mit
DECIMAL(10,2)
.
Hinweis zur Nutzung von Code-Beispielen
Die auf dieser Website bereitgestellten Code-Beispiele und Skripte dienen ausschließlich zu Demonstrations- und Lernzwecken. Die Nutzung in produktiven Umgebungen erfolgt auf eigene Verantwortung. Wir übernehmen keine Haftung für Schäden oder Datenverluste, die durch unsachgemäße Anwendung entstehen.