USE [eazybusiness];
GO
-- 1) Auftragsliste + Join auf tAuftrag in @o zwischenspeichern
DECLARE @orders TABLE (cAuftragsNr nvarchar(30) PRIMARY KEY);
INSERT INTO @orders VALUES (N'AUFTRAGSNUMMER1'), (N'AUFTRAGSNUMMER2'), (N'AUFTRAGSNUMMER3');
DECLARE @o TABLE (kAuftrag int PRIMARY KEY, cAuftragsNr nvarchar(30));
INSERT INTO @o(kAuftrag, cAuftragsNr)
SELECT a.kAuftrag, a.cAuftragsNr
FROM Verkauf.tAuftrag a
JOIN @orders r ON r.cAuftragsNr = a.cAuftragsNr;
-- 2a) Kompakte Zusammenfassung: nur pickbare Artikel (keine Freipositionen, keine Set-Header)
SELECT
o.cAuftragsNr,
SUM(CAST(p.fAnzahl AS float)) AS items_qty_pickable, -- Stückzahl gesamt
COUNT(*) AS lines_pickable -- Anzahl pickbarer Zeilen
FROM @o o
JOIN Verkauf.tAuftragPosition p ON p.kAuftrag = o.kAuftrag
WHERE p.kArtikel IS NOT NULL
AND ISNULL(p.fAnzahl,0) > 0
AND (p.kAuftragStueckliste IS NULL OR p.kAuftragStueckliste <> p.kAuftragPosition)
GROUP BY o.cAuftragsNr
ORDER BY o.cAuftragsNr;
-- 2b) Details der pickbaren Zeilen
SELECT
o.cAuftragsNr,
p.kAuftragPosition, p.kArtikel, p.cArtNr, p.cName,
p.fAnzahl, p.nType, p.kAuftragStueckliste
FROM @o o
JOIN Verkauf.tAuftragPosition p ON p.kAuftrag = o.kAuftrag
WHERE p.kArtikel IS NOT NULL
AND ISNULL(p.fAnzahl,0) > 0
AND (p.kAuftragStueckliste IS NULL OR p.kAuftragStueckliste <> p.kAuftragPosition)
ORDER BY o.cAuftragsNr, p.kAuftragPosition;
-- 2c) (optional) Alle Positionen inkl. Markierung, warum (nicht) pickbar
SELECT
o.cAuftragsNr,
p.kAuftragPosition, p.kArtikel, p.cArtNr, p.cName, p.fAnzahl, p.nType, p.kAuftragStueckliste,
CASE WHEN p.kArtikel IS NOT NULL AND ISNULL(p.fAnzahl,0)>0
AND (p.kAuftragStueckliste IS NULL OR p.kAuftragStueckliste<>p.kAuftragPosition)
THEN 1 ELSE 0 END AS is_pickable,
CASE WHEN p.kAuftragStueckliste IS NOT NULL AND p.kAuftragStueckliste = p.kAuftragPosition
THEN 1 ELSE 0 END AS is_set_header
FROM @o o
JOIN Verkauf.tAuftragPosition p ON p.kAuftrag = o.kAuftrag
ORDER BY o.cAuftragsNr, p.kAuftragPosition;