Contents

    Custom overviews for items

    In JTL-Wawi, you can create custom overviews using SQL. In this documentation you will find sample SQL commands for custom overviews in the Item management of JTL-Wawi. To learn how to create custom overviews, please read the Creating custom overviews documentation.

    Sale per customer

    With this custom overview, you can see all customers who have ever bought the selected item. The following information is shown:

    • SKU
    • Customer ID
    • Customer
    • Average Net SP
    • Average Gross SP
    • Sales orders
    • Total quantity
    • Average quantity per purchase
    • Last order
    -- Standardartikel
    SELECT
    	tArtikel.cArtNr AS 'ArtNr',
        tKunde.cKundenNr AS Kundennummer,
        CONCAT(tAdresse.cVorname, ' ', tAdresse.cName, ' ', tAdresse.cFirma) AS Kunde,
    	ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKNetto), 0.0)), 2) AS 'Ø VK-Netto',
        ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKPreis), 0.0)), 2) AS 'Ø VK-Brutto',	
        COUNT(DISTINCT(tBestellung.kBestellung)) AS Auftraege,
        ROUND(CONVERT(FLOAT, SUM(tbestellpos.nAnzahl)), 2) AS Gesamtmenge,
        CASE
            WHEN COUNT(DISTINCT(tBestellung.kBestellung)) > 0 THEN ROUND(CONVERT(FLOAT, SUM(tbestellpos.nAnzahl) / COUNT(DISTINCT(tBestellung.kBestellung))), 2)
            ELSE 0
        END AS 'Ø Menge pro Kauf',
        MAX(tBestellung.dErstellt) AS 'Letzter Kauf'
    FROM tbestellpos
    JOIN tBestellung ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
    JOIN tKunde ON tBestellung.tKunde_kKunde = tkunde.kKunde
    JOIN tAdresse ON tAdresse.kKunde = tkunde.kKunde
    JOIN tartikel ON tartikel.kArtikel = tbestellpos.tArtikel_kArtikel
    WHERE tartikel.kArtikel = @Key
    	AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
        AND tbestellung.cType = 'B'
    GROUP BY    
    			tbestellung.tKunde_kKunde,
                tartikel.kVaterArtikel,
                tKunde.cKundenNr,
                tAdresse.cVorname,
                tAdresse.cName,
                tAdresse.cFirma,
    			tArtikel.cArtNr
    
    -- Vaterartikel bei Varkombis
    UNION
    SELECT
    	CONCAT('Alle Kinder von: ', jArtikel.cArtNr) AS 'ArtNr',
        tKunde.cKundenNr AS Kundennummer,
        CONCAT(tAdresse.cVorname, ' ', tAdresse.cName, ' ', tAdresse.cFirma) AS Kunde,
    	ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKNetto), 0.0)), 2) AS 'Ø VK-Netto',
        ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKPreis), 0.0)), 2) AS 'Ø VK-Brutto',	
        COUNT(DISTINCT(tBestellung.kBestellung)) AS Auftraege,
        ROUND(CONVERT(FLOAT, SUM(tbestellpos.nAnzahl)), 2) AS Gesamtmenge,
        CASE
            WHEN COUNT(DISTINCT(tBestellung.kBestellung)) > 0 THEN ROUND(CONVERT(FLOAT, SUM(tbestellpos.nAnzahl) / COUNT(DISTINCT(tBestellung.kBestellung))), 2)
            ELSE 0
        END AS 'Ø Menge pro Kauf',
        MAX(tBestellung.dErstellt) AS 'Letzter Kauf'
    FROM tbestellpos
    JOIN tBestellung ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
    JOIN tKunde ON tBestellung.tKunde_kKunde = tkunde.kKunde
    JOIN tAdresse ON tAdresse.kKunde = tkunde.kKunde
    JOIN tartikel ON tartikel.kArtikel = tbestellpos.tArtikel_kArtikel
    JOIN
    (SELECT tartikel.kArtikel, cArtNr
    	FROM tartikel
    	WHERE tartikel.kArtikel = @Key
    ) AS jArtikel ON 1=1
    WHERE tartikel.kVaterArtikel = @Key
    	AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
        AND tbestellung.cType = 'B'
    GROUP BY    
    			tbestellung.tKunde_kKunde,
                tartikel.kVaterArtikel,
                tKunde.cKundenNr,
                tAdresse.cVorname,
                tAdresse.cName,
                tAdresse.cFirma,
    			jArtikel.cArtNr
    ORDER BY 'Letzter Kauf' DESC

    Activities per platform

    With this custom overview, you can see all platforms on which the item is currently active. These can be marketplaces connected via JTL-eazyAuction as well as marketplaces via third-party connections, but also online shops and POS cash registers. The following information is shown:

    • Platform
    • Currently offered quantity
    • Current price
    • Sales in the last 30 days
    • Sales in the last 90 days
    • Sales in the last 365 days
    • Total sales
    • Average Gross SP
    • Angebots-ID, z. B. ASIN von Amazon oder ItemID von eBay
    --Amazon Angebote
    SELECT tPlattform.cName AS 'Plattform',
            jAmazon.nQuantity AS 'Menge',
    		jAmazon.fPrice AS 'Akt. Preis',
            ISNULL(jLetzte30Tage.absatz, 0) AS 'Absatz 30 Tage',
            ISNULL(jLetzte90Tage.absatz, 0) AS 'Abs. 90 Tage',
            ISNULL(jLetzte365Tage.absatz, 0) AS 'Abs. 365 Tage',
            ISNULL(jAbsatzGesamt.absatz, 0) AS 'Abs. Gesamt',
    		ISNULL(jVKDurchschnitt.vk, 0) 'Ø VK-Brutto',
    		ISNULL(jAmazon.cASIN1, '') AS 'ID'
    FROM tPlattform
    JOIN ( --läuft er überhaupt auf amazon?
        SELECT	nPlattform,
    			nQuantity,
    			ROUND(CONVERT(FLOAT, fPrice), 2) AS fPrice,
    			pf_amazon_angebot.cASIN1
        FROM pf_amazon_angebot
    	JOIN pf_amazon_angebot_mapping ON pf_amazon_angebot_mapping.cSellerSKU = pf_amazon_angebot.cSellerSKU
    		AND pf_amazon_angebot_mapping.kUser = pf_amazon_angebot.kUser
        WHERE pf_amazon_angebot_mapping.kArtikel = @Key
    	) AS jAmazon ON jAmazon.nPlattform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -30, getdate())
        GROUP BY nPlatform
    ) AS jLetzte30Tage ON jLetzte30Tage.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -90, getdate())
        GROUP BY nPlatform
    ) AS jLetzte90Tage ON jLetzte90Tage.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -365, getdate())
        GROUP BY nPlatform
    ) AS jLetzte365Tage ON jLetzte365Tage.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY nPlatform
    ) AS jAbsatzGesamt ON jAbsatzGesamt.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKPreis), 0.0)), 2) AS vk
        FROM tbestellpos
        JOIN tBestellung ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY nPlatform
    ) AS jVKDurchschnitt ON jVKDurchschnitt.nPlatform = tPlattform.nPlattform
    UNION --eBay Angebote - normale Artikel
    SELECT tPlattform.cName AS 'Plattform',
            ISNULL(jEbay.Quantity, 0) AS 'Menge',
    		ISNULL(jEbay.StartPrice, 0) AS 'Akt. Preis',
            ISNULL(jLetzte30Tage.absatz, 0) AS 'Absatz 30 Tage',
            ISNULL(jLetzte90Tage.absatz, 0) AS 'Abs. 90 Tage',
            ISNULL(jLetzte365Tage.absatz, 0) AS 'Abs. 365 Tage',
            ISNULL(jAbsatzGesamt.absatz, 0) AS 'Abs. Gesamt',
    		ISNULL(jVKDurchschnitt.vk, 0) 'Ø VK-Brutto',
    		ISNULL(jEbay.ItemID, '') AS 'ID'
    FROM tPlattform
    JOIN ( --läuft er überhaupt auf ebay?
     SELECT	ebay_xx_sites.kPlattform,
    		ebay_item.Quantity,
    		ROUND(CONVERT(FLOAT, ebay_item.StartPrice), 2) AS StartPrice,
    		ebay_item.ItemID
        FROM ebay_item
    	JOIN ebay_xx_sites ON ebay_xx_sites.SiteID = ebay_item.SiteID
        WHERE	ebay_item.kArtikel = @Key
    		AND ebay_item.Status IN (3,7)
    ) AS jEbay ON jEbay.kPlattform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -30, getdate())
        GROUP BY nPlatform
    ) AS jLetzte30Tage ON jLetzte30Tage.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -90, getdate())
        GROUP BY nPlatform
    ) AS jLetzte90Tage ON jLetzte90Tage.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -365, getdate())
        GROUP BY nPlatform
    ) AS jLetzte365Tage ON jLetzte365Tage.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY nPlatform
    ) AS jAbsatzGesamt ON jAbsatzGesamt.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKPreis), 0.0)), 2) AS vk
        FROM tbestellpos
        JOIN tBestellung ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY nPlatform
    ) AS jVKDurchschnitt ON jVKDurchschnitt.nPlatform = tPlattform.nPlattform
    UNION --eBay Angebote - als Kindartikel im eBay Variationsangebot
    SELECT tPlattform.cName AS 'Plattform',
            jEbay.fAnzahl AS 'Menge',
    		jEbay.fPreis AS 'Akt. Preis',
            ISNULL(jLetzte30Tage.absatz, 0) AS 'Absatz 30 Tage',
            ISNULL(jLetzte90Tage.absatz, 0) AS 'Abs. 90 Tage',
            ISNULL(jLetzte365Tage.absatz, 0) AS 'Abs. 365 Tage',
            ISNULL(jAbsatzGesamt.absatz, 0) AS 'Abs. Gesamt',
    		ISNULL(jVKDurchschnitt.vk, 0) 'Ø VK-Brutto',
    		CONCAT('Varkombi-Kind: ', jEbay.ItemID) AS 'ID'
    FROM tPlattform
    JOIN ( --läuft er überhaupt auf ebay als Kindartikel?
     SELECT	ebay_xx_sites.kPlattform,
    		CONVERT(INT, ebay_item2kombi.fAnzahl) AS fAnzahl,
    		ROUND(CONVERT(FLOAT, ebay_item2kombi.fPreis), 2) AS fPreis,
    		ebay_item.ItemID
        FROM ebay_item
    	JOIN ebay_xx_sites ON ebay_xx_sites.SiteID = ebay_item.SiteID
    	JOIN ebay_item2kombi ON ebay_item2kombi.kItem = ebay_item.kItem
    	JOIN tartikel ON tartikel.kEigenschaftKombi = ebay_item2kombi.kEigenschaftKombi
        WHERE	tartikel.kArtikel = @Key
    		AND ebay_item.Status IN (3,7)
    ) AS jEbay ON jEbay.kPlattform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -30, getdate())
        GROUP BY nPlatform
    ) AS jLetzte30Tage ON jLetzte30Tage.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -90, getdate())
        GROUP BY nPlatform
    ) AS jLetzte90Tage ON jLetzte90Tage.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -365, getdate())
        GROUP BY nPlatform
    ) AS jLetzte365Tage ON jLetzte365Tage.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY nPlatform
    ) AS jAbsatzGesamt ON jAbsatzGesamt.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKPreis), 0.0)), 2) AS vk
        FROM tbestellpos
        JOIN tBestellung ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY nPlatform
    ) AS jVKDurchschnitt ON jVKDurchschnitt.nPlatform = tPlattform.nPlattform
    UNION --eBay Angebote - als Kindartikel im eBay Variationsangebot
    SELECT tShop.cName AS 'Plattform',
            ISNULL(jShop.fVerfuegbar, 0) AS 'Menge',
    		dbo.ifGetPrice(jShop.kArtikel, 0, 1, jShop.kShop, 1) AS 'Akt. Preis',
            ISNULL(jLetzte30Tage.absatz, 0) AS 'Absatz 30 Tage',
            ISNULL(jLetzte90Tage.absatz, 0) AS 'Abs. 90 Tage',
            ISNULL(jLetzte365Tage.absatz, 0) AS 'Abs. 365 Tage',
            ISNULL(jAbsatzGesamt.absatz, 0) AS 'Abs. Gesamt',
    		ISNULL(jVKDurchschnitt.vk, 0) 'Ø VK-Brutto',
    		jShop.cArtNr AS 'ID'
    FROM tShop
    JOIN ( --läuft er in Shops oder POS, etc.?
     SELECT	tArtikelShop.kShop,
    		tArtikelShop.kArtikel,
    		ROUND(CONVERT(FLOAT, ISNULL(vLagerbestandEx.fVerfuegbar, 0)), 2) AS fVerfuegbar,
    		tartikel.cArtNr
        FROM tartikel
    	JOIN tArtikelShop ON tArtikelShop.kArtikel = tartikel.kArtikel
    	LEFT JOIN vLagerbestandEx ON vLagerbestandEx.kArtikel = tartikel.kArtikel
        WHERE	tartikel.kArtikel = @Key
    		AND tArtikelShop.cDelInet != 'Y'
    ) AS jShop ON jShop.kShop = tShop.kShop
    LEFT JOIN (
        SELECT kShop, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -30, getdate())
        GROUP BY kShop
    ) AS jLetzte30Tage ON jLetzte30Tage.kShop = tShop.kShop
    LEFT JOIN (
        SELECT kShop, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -90, getdate())
        GROUP BY kShop
    ) AS jLetzte90Tage ON jLetzte90Tage.kShop = tShop.kShop
    LEFT JOIN (
        SELECT kShop, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -365, getdate())
        GROUP BY kShop
    ) AS jLetzte365Tage ON jLetzte365Tage.kShop = tShop.kShop
    LEFT JOIN (
        SELECT kShop, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY kShop
    ) AS jAbsatzGesamt ON jAbsatzGesamt.kShop = tShop.kShop
    LEFT JOIN (
        SELECT kShop, ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKPreis), 0.0)), 2) AS vk
        FROM tbestellpos
        JOIN tBestellung ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY kShop
    ) AS jVKDurchschnitt ON jVKDurchschnitt.kShop = tShop.kShop

    Cross-selling

    With this custom overview you can see how often the cross-selling items of the selected item are sold. This allows you to determine whether a cross-selling item continues to make sense or might better be replaced. The following information is shown:

    • Cross-selling group
    • SKU
    • Cross-selling items
    • Number of joint purchases
    SELECT	tXSellGruppe.cName AS 'Cross-Selling-Gruppe'
    		, tArtikel.cArtNr AS 'Artikelnummer'
    		, tArtikelBeschreibung.cName AS 'Cross-Selling Artikel'
    		, 	(SELECT COUNT(*) FROM ( 
    				SELECT tBestellung_kBestellung FROM tbestellpos WHERE tArtikel_kArtikel = tXSell.kXSellArtikel
    					AND tXSell.kArtikel = @Key
    				INTERSECT
    				SELECT tBestellung_kBestellung FROM tbestellpos WHERE tArtikel_kArtikel = @Key
    			) AS fKaeufe) AS 'Anzahl gemeinsame Käufe'
    FROM tXSell
    JOIN dbo.tSpracheUsed ON nStandard = 1
    JOIN tXSellGruppe ON tXSellGruppe.kXSellGruppe = tXSell.kXSellGruppe
        AND tXSellGruppe.kSprache = tSpracheUsed.kSprache
    JOIN dbo.tArtikelBeschreibung ON tArtikelBeschreibung.kArtikel = tXSell.kXSellArtikel
        AND tArtikelBeschreibung.kSprache = tSpracheUsed.kSprache
        AND tArtikelBeschreibung.kPlattform=1
    JOIN tArtikel ON tArtikel.kArtikel = tXSell.kXSellArtikel
    WHERE tXSell.kArtikel = @Key
    ORDER BY tXSellGruppe.cName, tArtikelBeschreibung.cName

    FBA stock

    With this custom overview, you can see your FBA stock in detail, so that you can also see the stock that is currently reserved. This information is displayed for all linked Amazon FBA listings of the selected item. The following information is shown:

    • SKU
    • Awaiting delivery (in JTL-Wawi)
    • Wawi Available
    • Total Available
    • FBA listing (Yes/No)
    • FBA Available stock
    • FBA Warehouse (Physical inventory = FBA Available + FBA Unsellable + FBA Reserved)
    • FBA Unsellable (Stock not for sale due to condition)
    • FBA Reserved (Reserved stock = quantity that is currently being picked, packed and shipped or retrieved for measuring, sampling or other internal processes)
    • FBA Total (Total stock = FBA Warehouse + FBA Inbound Working + FBA Inbound Shipped)
    • FBA Inbound Working (Quantity that you have registered as awaiting delivery on Amazon)
    • FBA Inbound Shipped (Quantity that you have registered as awaiting delivery on Amazon and for which you have stored a tracking ID)
    • FBA Receiving (Quantity that has arrived at Amazon and is currently being processed)
    SELECT tArtikel.cArtNr AS Artikelnummer
    	, ROUND(CONVERT(FLOAT, vLagerbestandEx.fZulauf), 2) AS Zulauf
    	, ROUND(CONVERT(FLOAT, vLagerbestandEx.fVerfuegbar), 2) AS 'Wawi Verfügbar'
    	, ROUND(CONVERT(FLOAT, vLagerbestandEx.fVerfuegbar + ISNULL(jAmazon.FBA_verfuegbar, 0)), 2) AS 'Gesamt Verfügbar'
    	, CASE
    		WHEN jAmazon.FBA_verfuegbar IS NULL THEN 'Nein'
    		ELSE 'Ja'
    		END AS 'FBA Angebot?'
    	, ISNULL(jAmazon.FBA_verfuegbar, 0) AS 'FBA Verfügbar'
    	, ISNULL(jAmazon.FBA_warehouse, 0) AS 'FBA Warehouse'
    	, ISNULL(jAmazon.FBA_unsellabe, 0) AS 'FBA Unsellable'
    	, ISNULL(jAmazon.FBA_reserved, 0) AS 'FBA Reserved'
    	, ISNULL(jAmazon.FBA_total, 0) AS 'FBA Total'
    	, ISNULL(jAmazon.FBA_inboundWorking, 0) AS 'FBA Inbound Working'
    	, ISNULL(jAmazon.FBA_inboundShipped, 0) AS 'FBA Inbound Shipped'
    	, ISNULL(jAmazon.FBA_receiving, 0) AS 'FBA Receiving'
    FROM tArtikel
    JOIN vLagerbestandEx ON vLagerbestandEx.kArtikel = tartikel.kArtikel
    LEFT JOIN ( 
        SELECT	pf_amazon_angebot_mapping.kArtikel,
    			SUM(pf_amazon_angebot_fba.nQuantity) AS FBA_verfuegbar,
    			SUM(pf_amazon_angebot_fba.nQtyWarehouse) AS FBA_warehouse,
    			SUM(pf_amazon_angebot_fba.nQtyUnsellable) AS FBA_unsellabe,
    			SUM(pf_amazon_angebot_fba.nQtyReserved) AS FBA_reserved,
    			SUM(pf_amazon_angebot_fba.nQtyTotal) AS FBA_total,
    			SUM(pf_amazon_angebot_fba.nQtyInboundWorking) AS FBA_inboundWorking,
    			SUM(pf_amazon_angebot_fba.nQtyInboundShipped) AS FBA_inboundShipped,
    			SUM(pf_amazon_angebot_fba.nQtyReceiving) AS FBA_receiving
        FROM pf_amazon_angebot_mapping
    	JOIN pf_amazon_angebot_fba ON pf_amazon_angebot_mapping.cSellerSKU = pf_amazon_angebot_fba.cSellerSKU
    		AND pf_amazon_angebot_mapping.kUser = pf_amazon_angebot_fba.kUser
        WHERE pf_amazon_angebot_mapping.kArtikel = @Key
    	GROUP BY pf_amazon_angebot_mapping.kArtikel
    	) AS jAmazon ON jAmazon.kArtikel = tArtikel.kArtikel
    WHERE tArtikel.kArtikel = @Key
    

    Category paths

    With this custom overview, you can see all category paths of the selected item at a glance. The following information is shown:

    • Category path
    • Category depth
    WITH kategorien AS
    ( 
    	SELECT dbo.tkategorie.kKategorie, dbo.tkategorie.kOberKategorie, 1 AS Tiefe, CAST(tKategorieSprache.cName AS varchar(500)) AS Kategoriepfad
    	FROM dbo.tkategorie
    	JOIN dbo.tSpracheUsed ON nStandard = 1
    	JOIN dbo.tKategorieSprache ON tKategorieSprache.kKategorie = tkategorie.kKategorie
    		AND tKategorieSprache.kSprache = tSpracheUsed.kSprache
    	JOIN tkategorieartikel ON tkategorieartikel.kKategorie = tkategorie.kKategorie
    	WHERE dbo.tkategorieartikel.kArtikel  = @Key
    	UNION ALL
    	SELECT dbo.tkategorie.kKategorie, dbo.tkategorie.kOberKategorie, Tiefe +1, CAST(tKategorieSprache.cName + ' -> ' + kategorien.Kategoriepfad AS varchar(500))  AS Kategoriepfad
    	FROM dbo.tkategorie
    	JOIN dbo.tSpracheUsed ON nStandard = 1
    	JOIN dbo.tKategorieSprache ON tKategorieSprache.kKategorie = tkategorie.kKategorie
    		AND tKategorieSprache.kSprache = tSpracheUsed.kSprache
    	JOIN kategorien ON dbo.tkategorie.kKategorie = kategorien.kOberKategorie
    )
    SELECT Kategoriepfad
    	, Tiefe AS Kategorietiefe
    FROM kategorien
    WHERE kOberKategorie = 0
    GROUP BY Kategoriepfad, Tiefe

    Complex item key performance indicators (KPIs)

    With this custom overview, you can see extensive information regarding awaiting delivery, range of coverage, sales and returns. Parent-child relationships as well as bills of materials are displayed in a component-by-component and additionally aggregated manner. The following information is shown:

    • Item type
    • SKU
    • Item name
    • Available
    • Awaiting delivery
    • Range of coverage
    • Sales in the last 30 days
    • Sales in the last 90 days
    • Sales in the last 365 days
    • Total sales
    • Average Gross SP
    • Return rate
    • Sell-through rate (Per month)
    -- wenn Vaterartikel, dann ganz oben auch die gesamtsumme aller kinder
    -- ergänzen um  Abverkaufsquote (verkaufte Teile / (verkaufte Teile + Lagerbestand
    
    -- wenn Stückliste, dann alle Komponenten anzeigen und ganz oben die Gesamtsumme der Kinder
    -- Wenn Std Artikel, dann auch anzeigen
    -- (wenn komponente von SL -> Dann alle SLs auch anzeigen)
    --
    
    
    -- Vaterartikel bei Varkombis
    SELECT  
    		'Vater (kumuliert)' AS 'Artikeltyp',
    		jArtikel.cArtNr AS ArtNr,
            CONCAT('(Vater kumuliert) ', jArtikel.cName) AS Artikelname, 
            ROUND(CONVERT(FLOAT, SUM(vLagerbestandEx.fVerfuegbar)), 2) AS 'Verfügbar',
            ROUND(CONVERT(FLOAT, SUM(vLagerbestandEx.fZulauf)), 2) AS 'Zulauf',
            CASE
                WHEN ISNULL(SUM(jLetzte365Tage.absatz), 0) > 0 THEN CONCAT(ROUND(CONVERT(FLOAT, SUM(vLagerbestandEx.fVerfuegbar) / (ISNULL(SUM(jLetzte365Tage.absatz), 0) / 365)), 1), ' Tage')
                ELSE 'unendlich'
            END AS 'Lagerreichweite',
            ISNULL(SUM(jLetzte30Tage.absatz), 0) AS 'Absatz 30 Tage',
            ISNULL(SUM(jLetzte90Tage.absatz), 0) AS 'Abs. 90 Tage',
            ISNULL(SUM(jLetzte365Tage.absatz), 0) AS 'Abs. 365 Tage',
            ISNULL(SUM(jAbsatzGesamt.absatz), 0) AS 'Abs. Gesamt',
            ISNULL(AVG(jVKDurchschnitt.vk), 0) AS 'Ø VK-Brutto',
            CONCAT(ROUND(CONVERT(FLOAT, (ISNULL(AVG(jRetourenGesamt.Retourenquote), 0))), 1), '%') AS 'Retourenquote',
            CASE
                WHEN ISNULL(SUM(jLetzte30Tage.absatz), 0) > 0 OR SUM(vLagerbestandEx.fVerfuegbar) > 0 THEN CONCAT(ROUND(CONVERT(FLOAT, (ISNULL(SUM(jLetzte30Tage.absatz), 0) / (SUM(vLagerbestandEx.fVerfuegbar) + ISNULL(SUM(jLetzte30Tage.absatz), 0)) * 100)), 1), '%')
                ELSE '-'
            END AS 'Abverkaufsquote (Monat)'
    FROM tartikel
    JOIN
    (SELECT tartikel.kArtikel, cArtNr, tArtikelBeschreibung.cName
    	FROM tartikel
    	JOIN dbo.tSpracheUsed ON nStandard = 1
    	JOIN dbo.tArtikelBeschreibung ON tArtikelBeschreibung.kArtikel = tartikel.kArtikel
    		AND tArtikelBeschreibung.kSprache = tSpracheUsed.kSprache
    		AND tArtikelBeschreibung.kPlattform=1
    	WHERE tartikel.kArtikel = @Key
    ) AS jArtikel ON jArtikel.kArtikel = @Key
    JOIN vLagerbestandEx ON vLagerbestandEx.kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -30, getdate())
        GROUP BY tArtikel_kArtikel
    ) AS jLetzte30Tage ON jLetzte30Tage.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -90, getdate())
        GROUP BY tArtikel_kArtikel
    ) AS jLetzte90Tage ON jLetzte90Tage.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -365, getdate())
        GROUP BY tArtikel_kArtikel
    ) AS jLetzte365Tage ON jLetzte365Tage.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY tArtikel_kArtikel
    ) AS jAbsatzGesamt ON jAbsatzGesamt.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKPreis), 0.0)), 2) AS vk
        FROM tbestellpos
        JOIN tBestellung ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY tArtikel_kArtikel
    ) AS jVKDurchschnitt ON jVKDurchschnitt.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
    SELECT jabsatzgesamt.tArtikel_kArtikel,
            (ISNULL(retourengesamt.rm, 0.0)/jabsatzgesamt.absatz)*100 as Retourenquote
    FROM
    (SELECT tArtikel_kArtikel,
        ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellung.cType = 'B'
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
        GROUP BY tArtikel_kArtikel) AS jabsatzgesamt
    LEFT JOIN
        (SELECT kArtikel,
            ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        GROUP BY kArtikel) AS retourengesamt on retourengesamt.kArtikel=jabsatzgesamt.tArtikel_kArtikel)
            as jRetourenGesamt on jRetourenGesamt.tArtikel_kArtikel = tartikel.kArtikel
    WHERE kVaterArtikel = @Key
    GROUP BY kVaterArtikel, jArtikel.cArtNr, jArtikel.cName
    
    UNION -- Kindartikel
    SELECT  
    		'-Kindartikel' AS 'Artikeltyp',
    		tartikel.cArtNr AS ArtNr,
            tArtikelBeschreibung.cName AS Artikelname,       
            ROUND(CONVERT(FLOAT, vLagerbestandEx.fVerfuegbar), 2) AS 'Verfügbar',
            ROUND(CONVERT(FLOAT, vLagerbestandEx.fZulauf), 2) AS 'Zulauf',
            CASE
                WHEN ISNULL(jLetzte365Tage.absatz, 0) > 0 THEN CONCAT(ROUND(CONVERT(FLOAT, vLagerbestandEx.fVerfuegbar / (ISNULL(jLetzte365Tage.absatz, 0) / 365)), 1), ' Tage')
                ELSE 'unendlich'
            END AS 'Lagerreichweite',
            ISNULL(jLetzte30Tage.absatz, 0) AS 'Absatz 30 Tage',
            ISNULL(jLetzte90Tage.absatz, 0) AS 'Abs. 90 Tage',
            ISNULL(jLetzte365Tage.absatz, 0) AS 'Abs. 365 Tage',
            ISNULL(jAbsatzGesamt.absatz, 0) AS 'Abs. Gesamt',
            ISNULL(jVKDurchschnitt.vk, 0) AS 'Ø VK-Brutto',
            ISNULL(jRetourenGesamt.Retourenquote, '0%') AS 'Retourenquote',
            CASE
                WHEN ISNULL(jLetzte30Tage.absatz, 0) > 0 OR vLagerbestandEx.fVerfuegbar > 0 THEN CONCAT(ROUND(CONVERT(FLOAT, (ISNULL(jLetzte30Tage.absatz, 0) / (vLagerbestandEx.fVerfuegbar + ISNULL(jLetzte30Tage.absatz, 0)) * 100)), 1), '%')
                ELSE '-'
            END AS 'Aberkaufsquote (Monat)'
    FROM tartikel
    JOIN dbo.tSpracheUsed ON nStandard = 1
    JOIN dbo.tArtikelBeschreibung ON tArtikelBeschreibung.kArtikel = tartikel.kArtikel
        AND tArtikelBeschreibung.kSprache = tSpracheUsed.kSprache
        AND tArtikelBeschreibung.kPlattform=1
    JOIN vLagerbestandEx ON vLagerbestandEx.kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -30, getdate())
        GROUP BY tArtikel_kArtikel
    ) AS jLetzte30Tage ON jLetzte30Tage.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -90, getdate())
        GROUP BY tArtikel_kArtikel
    ) AS jLetzte90Tage ON jLetzte90Tage.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -365, getdate())
        GROUP BY tArtikel_kArtikel
    ) AS jLetzte365Tage ON jLetzte365Tage.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY tArtikel_kArtikel
    ) AS jAbsatzGesamt ON jAbsatzGesamt.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKPreis), 0.0)), 2) AS vk
        FROM tbestellpos
        JOIN tBestellung ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY tArtikel_kArtikel
    ) AS jVKDurchschnitt ON jVKDurchschnitt.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
    SELECT jabsatzgesamt.tArtikel_kArtikel,
            CONCAT((ISNULL(retourengesamt.rm, 0.0)/jabsatzgesamt.absatz)*100, '%') as Retourenquote
    FROM
    (SELECT tArtikel_kArtikel,
        ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellung.cType = 'B'
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
        GROUP BY tArtikel_kArtikel) AS jabsatzgesamt
    LEFT JOIN
        (SELECT kArtikel,
            ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        GROUP BY kArtikel) AS retourengesamt on retourengesamt.kArtikel=jabsatzgesamt.tArtikel_kArtikel)
            as jRetourenGesamt on jRetourenGesamt.tArtikel_kArtikel = tartikel.kArtikel
    WHERE kVaterArtikel = @Key
    
    UNION -- Standardartikel
    SELECT  
    		CASE
    			WHEN tartikel.kStueckliste > 0 THEN 'Stückliste'
    			ELSE 'Standardartikel'
    		END  AS 'Artikeltyp',
    		tartikel.cArtNr AS ArtNr,
    		CASE
    			WHEN tartikel.kStueckliste > 0 THEN CONCAT('(Stückliste) ', tArtikelBeschreibung.cName)
    			ELSE tArtikelBeschreibung.cName
    		END AS Artikelname,
            ROUND(CONVERT(FLOAT, vLagerbestandEx.fVerfuegbar), 2) AS 'Verfügbar',
            ROUND(CONVERT(FLOAT, vLagerbestandEx.fZulauf), 2) AS 'Zulauf',
            CASE
                WHEN ISNULL(jLetzte365Tage.absatz, 0) > 0 THEN CONCAT(ROUND(CONVERT(FLOAT, vLagerbestandEx.fVerfuegbar / (ISNULL(jLetzte365Tage.absatz, 0) / 365)), 1), ' Tage')
                ELSE 'unendlich'
            END AS 'Lagerreichweite',
            ISNULL(jLetzte30Tage.absatz, 0) AS 'Absatz 30 Tage',
            ISNULL(jLetzte90Tage.absatz, 0) AS 'Abs. 90 Tage',
            ISNULL(jLetzte365Tage.absatz, 0) AS 'Abs. 365 Tage',
            ISNULL(jAbsatzGesamt.absatz, 0) AS 'Abs. Gesamt',
            ISNULL(jVKDurchschnitt.vk, 0) AS 'Ø VK-Brutto',
            ISNULL(jRetourenGesamt.Retourenquote, '0%') AS 'Retourenquote',
            CASE
                WHEN ISNULL(jLetzte30Tage.absatz, 0) > 0 OR vLagerbestandEx.fVerfuegbar > 0 THEN CONCAT(ROUND(CONVERT(FLOAT, (ISNULL(jLetzte30Tage.absatz, 0) / (vLagerbestandEx.fVerfuegbar + ISNULL(jLetzte30Tage.absatz, 0)) * 100)), 1), '%')
                ELSE '-'
            END AS 'Aberkaufsquote (Monat)'
    FROM tartikel
    JOIN dbo.tSpracheUsed ON nStandard = 1
    JOIN dbo.tArtikelBeschreibung ON tArtikelBeschreibung.kArtikel = tartikel.kArtikel
        AND tArtikelBeschreibung.kSprache = tSpracheUsed.kSprache
        AND tArtikelBeschreibung.kPlattform=1
    JOIN vLagerbestandEx ON vLagerbestandEx.kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -30, getdate())
        GROUP BY tArtikel_kArtikel
    ) AS jLetzte30Tage ON jLetzte30Tage.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -90, getdate())
        GROUP BY tArtikel_kArtikel
    ) AS jLetzte90Tage ON jLetzte90Tage.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -365, getdate())
        GROUP BY tArtikel_kArtikel
    ) AS jLetzte365Tage ON jLetzte365Tage.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY tArtikel_kArtikel
    ) AS jAbsatzGesamt ON jAbsatzGesamt.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKPreis), 0.0)), 2) AS vk
        FROM tbestellpos
        JOIN tBestellung ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY tArtikel_kArtikel
    ) AS jVKDurchschnitt ON jVKDurchschnitt.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
    SELECT jabsatzgesamt.tArtikel_kArtikel,
            CONCAT((ISNULL(retourengesamt.rm, 0.0)/jabsatzgesamt.absatz)*100, '%') as Retourenquote
    FROM
    (SELECT tArtikel_kArtikel,
        ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellung.cType = 'B'
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
        GROUP BY tArtikel_kArtikel) AS jabsatzgesamt
    LEFT JOIN
        (SELECT kArtikel,
            ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        GROUP BY kArtikel) AS retourengesamt on retourengesamt.kArtikel=jabsatzgesamt.tArtikel_kArtikel)
            as jRetourenGesamt on jRetourenGesamt.tArtikel_kArtikel = tartikel.kArtikel
    WHERE tartikel.kArtikel = @Key
    	AND nIstVater = 0
    
    UNION -- Stücklistenkomponenten
    SELECT  
    		'-Komponente' AS 'Artikeltyp',
    		tartikel.cArtNr AS ArtNr,
            tArtikelBeschreibung.cName AS Artikelname,       
            ROUND(CONVERT(FLOAT, vLagerbestandEx.fVerfuegbar), 2) AS 'Verfügbar',
            ROUND(CONVERT(FLOAT, vLagerbestandEx.fZulauf), 2) AS 'Zulauf',
            CASE
                WHEN ISNULL(jLetzte365Tage.absatz, 0) > 0 THEN CONCAT(ROUND(CONVERT(FLOAT, vLagerbestandEx.fVerfuegbar / (ISNULL(jLetzte365Tage.absatz, 0) / 365)), 1), ' Tage')
                ELSE 'unendlich'
            END AS 'Lagerreichweite',
            ISNULL(jLetzte30Tage.absatz, 0) AS 'Absatz 30 Tage',
            ISNULL(jLetzte90Tage.absatz, 0) AS 'Abs. 90 Tage',
            ISNULL(jLetzte365Tage.absatz, 0) AS 'Abs. 365 Tage',
            ISNULL(jAbsatzGesamt.absatz, 0) AS 'Abs. Gesamt',
            ISNULL(jVKDurchschnitt.vk, 0) AS 'Ø VK-Brutto',
            ISNULL(jRetourenGesamt.Retourenquote, '0%') AS 'Retourenquote',
            CASE
                WHEN ISNULL(jLetzte30Tage.absatz, 0) > 0 OR vLagerbestandEx.fVerfuegbar > 0 THEN CONCAT(ROUND(CONVERT(FLOAT, (ISNULL(jLetzte30Tage.absatz, 0) / (vLagerbestandEx.fVerfuegbar + ISNULL(jLetzte30Tage.absatz, 0)) * 100)), 1), '%')
                ELSE '-'
            END AS 'Aberkaufsquote (Monat)'
    FROM tartikel
    JOIN dbo.tSpracheUsed ON nStandard = 1
    JOIN dbo.tArtikelBeschreibung ON tArtikelBeschreibung.kArtikel = tartikel.kArtikel
        AND tArtikelBeschreibung.kSprache = tSpracheUsed.kSprache
        AND tArtikelBeschreibung.kPlattform=1
    JOIN vLagerbestandEx ON vLagerbestandEx.kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -30, getdate())
        GROUP BY tArtikel_kArtikel
    ) AS jLetzte30Tage ON jLetzte30Tage.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -90, getdate())
        GROUP BY tArtikel_kArtikel
    ) AS jLetzte90Tage ON jLetzte90Tage.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -365, getdate())
        GROUP BY tArtikel_kArtikel
    ) AS jLetzte365Tage ON jLetzte365Tage.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY tArtikel_kArtikel
    ) AS jAbsatzGesamt ON jAbsatzGesamt.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
        SELECT tArtikel_kArtikel, ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKPreis), 0.0)), 2) AS vk
        FROM tbestellpos
        JOIN tBestellung ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY tArtikel_kArtikel
    ) AS jVKDurchschnitt ON jVKDurchschnitt.tArtikel_kArtikel = tartikel.kArtikel
    LEFT JOIN (
    SELECT jabsatzgesamt.tArtikel_kArtikel,
            CONCAT((ISNULL(retourengesamt.rm, 0.0)/jabsatzgesamt.absatz)*100, '%') as Retourenquote
    FROM
    (SELECT tArtikel_kArtikel,
        ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellung.cType = 'B'
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
        GROUP BY tArtikel_kArtikel) AS jabsatzgesamt
    LEFT JOIN
        (SELECT kArtikel,
            ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        GROUP BY kArtikel) AS retourengesamt on retourengesamt.kArtikel=jabsatzgesamt.tArtikel_kArtikel)
            as jRetourenGesamt on jRetourenGesamt.tArtikel_kArtikel = tartikel.kArtikel
    WHERE tartikel.kArtikel IN (SELECT tStueckliste.kArtikel FROM tartikel JOIN tStueckliste ON tStueckliste.kStueckliste = tartikel.kStueckliste WHERE tartikel.kArtikel = @Key)
    	AND nIstVater = 0
    ORDER BY Artikeltyp DESC, ArtNr
    

    Depending on the selected item type, the overviews look like this:

    Parent item

    Bill of materials

    Standard item

    Returns overview

    With this custom overview you can see information on the returns of the selected item. The following information is shown:

    • Platform
    • Current month
    • Previous month
    • Last 30 days
    • Last 3 months
    • Current year
    • Last 365 days
    • Previous year
    • Total
    • Return rate
    SELECT    tPlattform.cName AS 'Plattform',
            ISNULL(jAktMonat.rm, 0) AS 'Akt. Monat',
            ISNULL(jVorMonat.rm, 0) AS 'Vormonat',
            ISNULL(jLetzte30Tage.rm, 0) AS 'Letzte 30 Tage',
            ISNULL(jLetzte3Monate.rm, 0) AS 'Letzte 3 Monate',      
            ISNULL(jAktJahr.rm, 0) AS 'Akt. Jahr',
            ISNULL(jLetzte365Tage.rm, 0) AS 'Letzte 365 Tage',
            ISNULL(jVorjahr.rm, 0) AS 'Vorjahr',
            ISNULL(jGesamt.rm, 0) AS 'Gesamt',
            ISNULL(jRetourenGesamt.Retourenquote, '0%') AS 'Retourenquote'
    FROM tPlattform
    LEFT JOIN (
        SELECT    nPlatform,
                ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
                AND YEAR(tRMRetoure.dErstellt) = YEAR(getdate())
                AND MONTH(tRMRetoure.dErstellt) = MONTH(getdate())
        GROUP BY nPlatform
    ) as jAktMonat on jAktMonat.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    50 AS nPlatform, --Plattform = Amazon
                ROUND(CONVERT(FLOAT, ISNULL(SUM(pf_amazon_retourpos.nMenge), 0.0)), 2) AS rm
        FROM pf_amazon_angebot_mapping
    	JOIN pf_amazon_retourpos ON pf_amazon_retourpos.cSellerSKU = pf_amazon_angebot_mapping.cSellerSKU 
        WHERE    pf_amazon_angebot_mapping.kArtikel = @Key
                AND YEAR(pf_amazon_retourpos.dRetourzeit) = YEAR(getdate())
                AND MONTH(pf_amazon_retourpos.dRetourzeit) = MONTH(getdate())
    ) as jAktMonatFBA on jAktMonatFBA.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    nPlatform,
                ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
                AND YEAR(tRMRetoure.dErstellt) = YEAR(DATEADD(MONTH, -1, getdate()))
                AND MONTH(tRMRetoure.dErstellt) = MONTH(DATEADD(MONTH, -1, getdate()))
        GROUP BY nPlatform
    ) as jVorMonat on jVorMonat.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    50 AS nPlatform, --Plattform = Amazon
                ROUND(CONVERT(FLOAT, ISNULL(SUM(pf_amazon_retourpos.nMenge), 0.0)), 2) AS rm
        FROM pf_amazon_angebot_mapping
    	JOIN pf_amazon_retourpos ON pf_amazon_retourpos.cSellerSKU = pf_amazon_angebot_mapping.cSellerSKU 
        WHERE    pf_amazon_angebot_mapping.kArtikel = @Key
                AND YEAR(pf_amazon_retourpos.dRetourzeit) = YEAR(DATEADD(MONTH, -1, getdate()))
                AND MONTH(pf_amazon_retourpos.dRetourzeit) = MONTH(DATEADD(MONTH, -1, getdate()))
    ) as jVorMonatFBA on jVorMonatFBA.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    nPlatform,
                ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
                AND tRMRetoure.dErstellt > DATEADD(DAY, -30, getdate())
        GROUP BY nPlatform
    ) as jLetzte30Tage on jLetzte30Tage.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    50 AS nPlatform, --Plattform = Amazon
                ROUND(CONVERT(FLOAT, ISNULL(SUM(pf_amazon_retourpos.nMenge), 0.0)), 2) AS rm
        FROM pf_amazon_angebot_mapping
    	JOIN pf_amazon_retourpos ON pf_amazon_retourpos.cSellerSKU = pf_amazon_angebot_mapping.cSellerSKU 
        WHERE    pf_amazon_angebot_mapping.kArtikel = @Key
    			AND pf_amazon_retourpos.dRetourzeit > DATEADD(DAY, -30, getdate())
    ) as jLetzte30TageFBA on jLetzte30TageFBA.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    nPlatform,
                ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
                AND tRMRetoure.dErstellt > DATEADD(MONTH, -3, getdate())
        GROUP BY nPlatform
    ) as jLetzte3Monate on jLetzte3Monate.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    50 AS nPlatform, --Plattform = Amazon
                ROUND(CONVERT(FLOAT, ISNULL(SUM(pf_amazon_retourpos.nMenge), 0.0)), 2) AS rm
        FROM pf_amazon_angebot_mapping
    	JOIN pf_amazon_retourpos ON pf_amazon_retourpos.cSellerSKU = pf_amazon_angebot_mapping.cSellerSKU 
        WHERE    pf_amazon_angebot_mapping.kArtikel = @Key
    			AND pf_amazon_retourpos.dRetourzeit > DATEADD(MONTH, -3, getdate())
    ) as jLetzte3MonateFBA on jLetzte3MonateFBA.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    nPlatform,
                ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
                AND YEAR(tRMRetoure.dErstellt) = YEAR(getdate())
        GROUP BY nPlatform
    ) as jAktJahr on jAktJahr.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    50 AS nPlatform, --Plattform = Amazon
                ROUND(CONVERT(FLOAT, ISNULL(SUM(pf_amazon_retourpos.nMenge), 0.0)), 2) AS rm
        FROM pf_amazon_angebot_mapping
    	JOIN pf_amazon_retourpos ON pf_amazon_retourpos.cSellerSKU = pf_amazon_angebot_mapping.cSellerSKU 
        WHERE    pf_amazon_angebot_mapping.kArtikel = @Key
    			AND YEAR(pf_amazon_retourpos.dRetourzeit) = YEAR(getdate())
    ) as jAktJahrFBA on jAktJahrFBA.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    nPlatform,
                ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
                AND tRMRetoure.dErstellt > DATEADD(DAY, -365, getdate())
        GROUP BY nPlatform
    ) as jLetzte365Tage on jLetzte365Tage.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    50 AS nPlatform, --Plattform = Amazon
                ROUND(CONVERT(FLOAT, ISNULL(SUM(pf_amazon_retourpos.nMenge), 0.0)), 2) AS rm
        FROM pf_amazon_angebot_mapping
    	JOIN pf_amazon_retourpos ON pf_amazon_retourpos.cSellerSKU = pf_amazon_angebot_mapping.cSellerSKU 
        WHERE    pf_amazon_angebot_mapping.kArtikel = @Key
    			AND pf_amazon_retourpos.dRetourzeit > DATEADD(DAY, -365, getdate())
    ) as jLetzte365TageFBA on jLetzte365TageFBA.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    nPlatform,
                ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
                AND YEAR(tRMRetoure.dErstellt) = YEAR(DATEADD(YEAR, -1, getdate()))
        GROUP BY nPlatform
    ) as jVorjahr on jVorjahr.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    50 AS nPlatform, --Plattform = Amazon
                ROUND(CONVERT(FLOAT, ISNULL(SUM(pf_amazon_retourpos.nMenge), 0.0)), 2) AS rm
        FROM pf_amazon_angebot_mapping
    	JOIN pf_amazon_retourpos ON pf_amazon_retourpos.cSellerSKU = pf_amazon_angebot_mapping.cSellerSKU 
        WHERE    pf_amazon_angebot_mapping.kArtikel = @Key
    			AND YEAR(pf_amazon_retourpos.dRetourzeit) = YEAR(DATEADD(YEAR, -1, getdate()))
    ) as jVorjahrFBA on jVorjahrFBA.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    nPlatform,
                ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
        GROUP BY nPlatform
    ) as jGesamt on jGesamt.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT    50 AS nPlatform, --Plattform = Amazon
                ROUND(CONVERT(FLOAT, ISNULL(SUM(pf_amazon_retourpos.nMenge), 0.0)), 2) AS rm
        FROM pf_amazon_angebot_mapping
    	JOIN pf_amazon_retourpos ON pf_amazon_retourpos.cSellerSKU = pf_amazon_angebot_mapping.cSellerSKU 
        WHERE    pf_amazon_angebot_mapping.kArtikel = @Key
    ) as jGesamtFBA on jGesamtFBA.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
    	SELECT jabsatzgesamt.nPlatform, 
            CONCAT((ISNULL(retourengesamt.rm, 0.0)/jabsatzgesamt.absatz)*100, '%') as Retourenquote
    	FROM (
    		SELECT tbestellung.nPlatform,
    		ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
    		FROM tbestellung
    		JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
    		WHERE tbestellpos.tArtikel_kArtikel = @Key
    			AND tbestellung.cType = 'B'
    			AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
    		GROUP BY nPlatform) AS jabsatzgesamt
    		LEFT JOIN (
    			SELECT nPlatform,
    			ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
    			FROM tbestellung
    			JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
    			JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
    			WHERE    tRMRetourePos.kArtikel = @Key
    			GROUP BY nPlatform) AS retourengesamt on retourengesamt.nPlatform=jabsatzgesamt.nPlatform
    	) as jRetourenGesamt on jRetourenGesamt.nPlatform = tPlattform.nPlattform
    	/* todo - nur fba bestellunegn zusammenzählen
    LEFT JOIN (
    	SELECT jabsatzgesamt.nPlatform, 
            CONCAT((ISNULL(jGesamtFBA.rm, 0.0)/jabsatzgesamt.absatz)*100, '%') as Retourenquote
    	FROM (
    		SELECT tbestellung.nPlatform,
    		ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
    		FROM tbestellung
    		JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
    		WHERE tbestellpos.tArtikel_kArtikel = @Key
    			AND tbestellung.cType = 'B'
    			AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
    		GROUP BY nPlatform) AS jabsatzgesamt
    		LEFT JOIN (
    			SELECT    50 AS nPlatform, --Plattform = Amazon
    					ROUND(CONVERT(FLOAT, ISNULL(SUM(pf_amazon_retourpos.nMenge), 0.0)), 2) AS rm
    			FROM pf_amazon_angebot_mapping
    			JOIN pf_amazon_retourpos ON pf_amazon_retourpos.cSellerSKU = pf_amazon_angebot_mapping.cSellerSKU 
    			WHERE    pf_amazon_angebot_mapping.kArtikel = @Key
    		) as jGesamtFBA on 1 = 1
    	) as jRetourenGesamtFBA on jRetourenGesamtFBA.nPlatform = tPlattform.nPlattform
    	*/ 
    UNION
    SELECT 'Alle Plattformen' AS 'Plattform',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
                AND YEAR(tRMRetoure.dErstellt) = YEAR(getdate())
                AND MONTH(tRMRetoure.dErstellt) = MONTH(getdate())) as 'Akt. Monat',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
                AND YEAR(tRMRetoure.dErstellt) = YEAR(DATEADD(MONTH, -1, getdate()))
                AND MONTH(tRMRetoure.dErstellt) = MONTH(DATEADD(MONTH, -1, getdate()))) as 'Vormonat',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
        AND tRMRetoure.dErstellt > DATEADD(DAY, -30, getdate())) as 'Letzte 30 Tage',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
        AND tRMRetoure.dErstellt > DATEADD(MONTH, -3, getdate())) as 'Letzte 3 Monate',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
        AND YEAR(tRMRetoure.dErstellt) = YEAR(getdate())) as 'Akt. Jahr',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
        AND tRMRetoure.dErstellt > DATEADD(DAY, -365, getdate())) as 'Letzte 365 Tage',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
        AND YEAR(tRMRetoure.dErstellt) = YEAR(DATEADD(YEAR, -1, getdate()))) as 'Vorjahr',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key) as 'Gesamt',
        (SELECT CONCAT(ROUND((retourengesamt.rm/jabsatzgesamt.absatz)*100, 2), '%') as Retourenquote
    FROM
    (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key) AS retourengesamt
    JOIN 
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tbestellung.cType = 'B') AS jabsatzgesamt on 1=1) AS Retourenquote
    ORDER BY Plattform

    Sales per platform

    With this custom overview you can see how often the selected item is sold via the different sales channels. Marketplaces via third-party connections, online shop systems and POS cash registers are also considered in the overview. The following information is shown:

    • Platform
    • Today
    • Yesterday
    • Current month
    • Previous month
    • Last 30 days
    • Last 3 months
    • Current year
    • Last 365 days
    • Previous year
    • Total
    SELECT tPlattform.cName AS 'Plattform',
            ISNULL(jAktTag.absatz, 0) AS 'Heute',
            ISNULL(jGestern .absatz, 0) AS 'Gestern',  
            ISNULL(jAktMonat.absatz, 0) AS 'Akt. Monat',
            ISNULL(jVorMonat.absatz, 0) AS 'Vormonat',
            ISNULL(jLetzte30Tage.absatz, 0) AS 'Letzte 30 Tage',
            ISNULL(jLetzte3Monate.absatz, 0) AS 'Letzte 3 Monate',  
            ISNULL(jAktJahr.absatz, 0) AS 'Akt. Jahr',
            ISNULL(jLetzte365Tage.absatz, 0) AS 'Letzte 365 Tage',
            ISNULL(jVorjahr.absatz, 0) AS 'Vorjahr',
            ISNULL(jGesamt.absatz, 0) AS 'Gesamt',
            ISNULL(jVKDurchschnitt.vknetto, 0) 'Ø VK-Netto',
            ISNULL(jRetourenGesamt.Retourenquote, '0%') AS 'Retourenquote'
    FROM tPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tbestellung.cType = 'B'
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND YEAR(tBestellung.dErstellt) = YEAR(getdate())
            AND MONTH(tBestellung.dErstellt) = MONTH(getdate())
            AND DAY(tBestellung.dErstellt) = DAY(getdate())
        GROUP BY nPlatform
    ) AS jAktTag ON jAktTag.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tbestellung.cType = 'B'
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND YEAR(tBestellung.dErstellt) = YEAR(DATEADD(DAY, -1, getdate()))
            AND MONTH(tBestellung.dErstellt) = MONTH(DATEADD(DAY, -1, getdate()))
            AND DAY(tBestellung.dErstellt) = DAY(DATEADD(DAY, -1, getdate()))
        GROUP BY nPlatform
    ) AS jGestern ON jGestern.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tbestellung.cType = 'B'
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND YEAR(tBestellung.dErstellt) = YEAR(getdate())
            AND MONTH(tBestellung.dErstellt) = MONTH(getdate())
        GROUP BY nPlatform
    ) AS jAktMonat ON jAktMonat.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tbestellung.cType = 'B'
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND YEAR(tBestellung.dErstellt) = YEAR(DATEADD(MONTH, -1, getdate()))
            AND MONTH(tBestellung.dErstellt) = MONTH(DATEADD(MONTH, -1, getdate()))
        GROUP BY nPlatform
    ) AS jVorMonat ON jVorMonat.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -30, getdate())
        GROUP BY nPlatform
    ) AS jLetzte30Tage ON jLetzte30Tage.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(MONTH, -3, getdate())
        GROUP BY nPlatform
    ) AS jLetzte3Monate ON jLetzte3Monate.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND YEAR(tBestellung.dErstellt) = YEAR(getdate())
        GROUP BY nPlatform
    ) AS jAktJahr ON jAktJahr.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -365, getdate())
        GROUP BY nPlatform
    ) AS jLetzte365Tage ON jLetzte365Tage.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND YEAR(tBestellung.dErstellt) = YEAR(DATEADD(YEAR, -1, getdate()))
        GROUP BY nPlatform
    ) AS jVorjahr ON jVorjahr.nPlatform = tPlattform.nPlattform
    JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY nPlatform
    ) AS jGesamt ON jGesamt.nPlatform = tPlattform.nPlattform
    JOIN (
        SELECT nPlatform, ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKNetto / tBestellung.fFaktor), 0.0)), 2) AS vknetto -- für Brutto 'fVKNetto' durch 'fVKPreis' ersetzen
        FROM tbestellpos
        JOIN tBestellung ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
        GROUP BY nPlatform
    ) AS jVKDurchschnitt ON jVKDurchschnitt.nPlatform = tPlattform.nPlattform
    LEFT JOIN (
    SELECT jabsatzgesamt.nPlatform, 
            CONCAT((CASE WHEN jabsatzgesamt.absatz > 0.0 THEN ISNULL(retourengesamt.rm, 0.0) / jabsatzgesamt.absatz ELSE 0.0 END)*100, '%') as Retourenquote
    FROM
    (SELECT tbestellung.nPlatform,
        ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tbestellung.cType = 'B'
      AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
        GROUP BY nPlatform) AS jabsatzgesamt
    LEFT JOIN 
        (SELECT nPlatform,
      ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key
        GROUP BY nPlatform) AS retourengesamt on retourengesamt.nPlatform=jabsatzgesamt.nPlatform) 
            as jRetourenGesamt on jRetourenGesamt.nPlatform = tPlattform.nPlattform
    UNION
    SELECT 'Alle Plattformen' AS 'Plattform',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND YEAR(tBestellung.dErstellt) = YEAR(getdate())
            AND MONTH(tBestellung.dErstellt) = MONTH(getdate())
            AND DAY(tBestellung.dErstellt) = DAY(getdate())) AS 'Heute',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND YEAR(tBestellung.dErstellt) = YEAR(DATEADD(DAY, -1, getdate()))
            AND MONTH(tBestellung.dErstellt) = MONTH(DATEADD(DAY, -1, getdate()))
            AND DAY(tBestellung.dErstellt) = DAY(DATEADD(DAY, -1, getdate()))) AS 'Gestern',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND YEAR(tBestellung.dErstellt) = YEAR(getdate())
            AND MONTH(tBestellung.dErstellt) = MONTH(getdate())) AS 'Akt. Monat',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND YEAR(tBestellung.dErstellt) = YEAR(DATEADD(MONTH, -1, getdate()))
            AND MONTH(tBestellung.dErstellt) = MONTH(DATEADD(MONTH, -1, getdate()))) AS 'Vormonat',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tbestellung.cType = 'B'
            AND tBestellung.dErstellt > DATEADD(DAY, -30, getdate())) AS 'Letzte 30 Tage',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tbestellung.cType = 'B'
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tBestellung.dErstellt > DATEADD(MONTH, -3, getdate())) AS 'Letzte 3 Monate',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tbestellung.cType = 'B'
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND YEAR(tBestellung.dErstellt) = YEAR(getdate())) AS 'Akt. Jahr',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tbestellung.cType = 'B'
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND tBestellung.dErstellt > DATEADD(DAY, -365, getdate())) AS 'Letzte 365 Tage',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tbestellung.cType = 'B'
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
            AND YEAR(tBestellung.dErstellt) = YEAR(DATEADD(YEAR, -1, getdate()))) AS 'Vorjahr',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tbestellung.cType = 'B'
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
        ) AS 'Gesamt',
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(AVG(tbestellpos.fVKNetto / tBestellung.fFaktor), 0.0)), 2) AS vknetto -- für Brutto 'fVKNetto' durch 'fVKPreis' ersetzen
        FROM tbestellpos
        JOIN tBestellung ON tBestellung.kBestellung = tbestellpos.tBestellung_kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tbestellung.cType = 'B'
            AND tBestellung.nStorno = 0 -- Stornierte Aufträge nicht beachten
        ) AS 'Ø VK-Netto',
    (SELECT CONCAT(ROUND((CASE WHEN jabsatzgesamt.absatz > 0.0 THEN retourengesamt.rm / jabsatzgesamt.absatz ELSE 0.0 END)*100, 2), '%') as Retourenquote
    FROM
    (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tRMRetourePos.fAnzahl), 0.0)), 2) AS rm
        FROM tbestellung
        JOIN tRMRetoure ON tRMRetoure.kBestellung = tBestellung.kBestellung
        JOIN tRMRetourePos ON tRMRetourePos.kRMRetoure = tRMRetoure.kRMRetoure
        WHERE    tRMRetourePos.kArtikel = @Key) AS retourengesamt
    JOIN 
        (SELECT ROUND(CONVERT(FLOAT, ISNULL(SUM(tbestellpos.nAnzahl), 0.0)), 2) AS absatz
        FROM tbestellung
        JOIN tbestellpos ON tbestellpos.tBestellung_kBestellung = tBestellung.kBestellung
        WHERE tbestellpos.tArtikel_kArtikel = @Key
            AND tbestellung.cType = 'B') AS jabsatzgesamt on 1=1) AS Retourenquote
    ORDER BY Plattform

    Awaiting delivery overview

    With this custom overview, you can see information on pending purchase orders of the selected item. The following information is shown:

    • Purchase order ID
    • Supplier
    • Purchase order date
    • Order quantity
    • Delivered quantity
    • Open quantity
    • Estimated delivery date
    • Note
    • Internal comment
    • Printing note
    • nStatus
    • Destination
    SELECT 
    	tLieferantenBestellung.cEigeneBestellnummer AS 'Bestellnummer',
    	tLieferant.cFirma AS 'Lieferant',
    	CONVERT(VARCHAR, tLieferantenBestellung.dErstellt, 104) AS 'Bestelldatum',
    	ROUND(CONVERT(FLOAT, tLieferantenBestellungPos.fMenge), 2) AS 'Bestellmenge',
    	ROUND(CONVERT(FLOAT, tLieferantenBestellungPos.fMengeGeliefert), 2) AS 'Gelieferte Menge',
    	ROUND(CONVERT(FLOAT, tLieferantenBestellungPos.fAnzahlOffen), 2) AS 'Offene Menge',
    	CONVERT(VARCHAR, tLieferantenBestellungPos.dLieferdatum, 104) AS 'Vorauss. Lieferdatum',
    	tLieferantenBestellungPos.cHinweis AS 'Hinweis',
    	tLieferantenBestellung.cInternerKommentar AS 'Interner Kommentar',
    	tLieferantenBestellung.cDruckAnmerkung AS 'Druckanmerkung',
    	tLieferantenBestellung.nStatus,
    	CASE
    		WHEN tLieferantenBestellung.kKunde > 0 THEN CONCAT(tLieferantenBestellungLA.cVorname, ' ', tLieferantenBestellungLA.cNachname, ' ', tLieferantenBestellungLA.cFirma)
    		ELSE ISNULL(tWarenLager.cName, '')
    	END AS 'Zielort'
    FROM tLieferantenBestellung
    	JOIN tLieferantenBestellungPos ON tLieferantenBestellungPos.kLieferantenBestellung = tLieferantenBestellung.kLieferantenBestellung
    	JOIN tArtikel ON tArtikel.kArtikel = tLieferantenBestellungPos.kArtikel
    	JOIN tlieferant ON tlieferant.kLieferant = tLieferantenBestellung.kLieferant
    	LEFT JOIN tWarenLager ON tWarenLager.kWarenLager = tLieferantenBestellung.kLager
    	JOIN tLieferantenBestellungLA ON tLieferantenBestellungLA.kLieferantenBestellungLA = tLieferantenBestellung.kLieferantenBestellungLA
    WHERE tArtikel.kArtikel = @Key
    	AND tLieferantenBestellung.nStatus >= 20 
    	AND tLieferantenBestellung.nStatus < 500 
    	AND (nDeleted = 0 OR nDeleted IS NULL)
    	AND tLieferantenBestellungPos.fMengeGeliefert < tLieferantenBestellungPos.fMenge

    Related topics