Neu Abfrage Kinderartikel aktiv für Verkaufskanal, aber Vaterartikel inaktiv

  • Am 13.06.25 ist der Telefon-Support wegen einer internen Veranstaltung nicht erreichbar, der Ticket-Support nur eingeschränkt. Wir danken Ihnen für Ihr Verständnis!

windkup

Aktives Mitglied
9. Juli 2018
23
7
Hallo, wir sind auf der Suche nach einer SQL Abfrage für die Verkaufskanäle, da es vorkommt das der Elternartikel nicht Shopaktiv ist, aber die Kinder und damit die gesamte Synchronisation (auch Bestände&Preise aller Artikel) zu Shopware ud Shopify unterbrochen wird.

Der Code soll folgendes ausgeben:
Zeige alle Vaterartikel an, bei denen ein oder mehrere Kinderartikel für einen Verkaufskanal aktiviert sind, der Vaterartikel aber nicht.

Wer kann uns weiterhelfen?
Danke im Voraus
Steve
 

zaxxo

Offizieller Servicepartner
SPBanner
29. November 2022
130
56
Michelstadt
Firma
Zaxxo UG (haftungsbeschränkt)
Aus dem Kopf raus, nicht getestet:

SQL:
SELECT DISTINCT tVater.cArtNr
FROM tArtikel
INNER JOIN tArtikel AS tVater ON tVater.kArtikel = tArtikel.kVaterArtikel
INNER JOIN tArtikelShop ON tArtikelShop.kArtikel = tArtikel.kArtikel
LEFT JOIN tArtikelShop AS tVaterShop ON tVaterShop.kArtikel = tVater.kArtikel AND tVaterShop.kShop = tArtikelShop.kShop
WHERE tArtikel.kVaterArtikel > 0 AND tVaterShop.kArtikel IS NULL
 
  • Gefällt mir
Reaktionen: frankell

frankell

Sehr aktives Mitglied
9. September 2019
1.699
491
Flensburg
Hallo Steve,

wenn Du rein an einer Auflistung der entsprechenden Vaterartikel interessiert bist, bist Du mit @zaxxos Query gut bedient. :thumbsup:

Wenn Du zusätzlich noch eine Auflistung der Kinder des betroffenen Vaters benötigst, bekommst Du hier noch einen alternativen Approach:

SQL:
SELECT
    ARTV.cArtNr AS 'Vater',
    STRING_AGG(CAST(ARTK.cArtNr AS NVARCHAR(MAX)), ', ') AS 'Kinder'
FROM
    tArtikel AS ARTV
    JOIN tArtikel AS ARTK ON ARTV.kArtikel = ARTK.kVaterArtikel
    LEFT JOIN tArtikelShop AS ARTSV ON ARTV.kArtikel = ARTSV.kArtikel
    LEFT JOIN tArtikelShop AS ARTSK ON ARTK.kArtikel = ARTSK.kArtikel
WHERE
    ARTSV.kArtikel IS NULL
    AND ARTSK.kArtikel IS NOT NULL
GROUP BY
    ARTV.cArtNr;

VG,
Frank
 

zaxxo

Offizieller Servicepartner
SPBanner
29. November 2022
130
56
Michelstadt
Firma
Zaxxo UG (haftungsbeschränkt)
Hallo Steve,

wenn Du rein an einer Auflistung der entsprechenden Vaterartikel interessiert bist, bist Du mit @zaxxos Query gut bedient. :thumbsup:

Wenn Du zusätzlich noch eine Auflistung der Kinder des betroffenen Vaters benötigst, bekommst Du hier noch einen alternativen Approach:

SQL:
SELECT
    ARTV.cArtNr AS 'Vater',
    STRING_AGG(CAST(ARTK.cArtNr AS NVARCHAR(MAX)), ', ') AS 'Kinder'
FROM
    tArtikel AS ARTV
    JOIN tArtikel AS ARTK ON ARTV.kArtikel = ARTK.kVaterArtikel
    LEFT JOIN tArtikelShop AS ARTSV ON ARTV.kArtikel = ARTSV.kArtikel
    LEFT JOIN tArtikelShop AS ARTSK ON ARTK.kArtikel = ARTSK.kArtikel
WHERE
    ARTSV.kArtikel IS NULL
    AND ARTSK.kArtikel IS NOT NULL
GROUP BY
    ARTV.cArtNr;

VG,
Frank
Auch eine gute Idee, die Kindartikel mit anzuzeigen :thumbsup:

Aber kleiner Hinweis: Das funktioniert so nur korrekt, wenn man nur einen Shop hat. Ansonsten könnte es zu falschen Ergebnissen kommen, wenn der Vater in einem Shop aktiv ist und im anderen nicht.
 

frankell

Sehr aktives Mitglied
9. September 2019
1.699
491
Flensburg
Aber kleiner Hinweis: Das funktioniert so nur korrekt, wenn man nur einen Shop hat. Ansonsten könnte es zu falschen Ergebnissen kommen, wenn der Vater in einem Shop aktiv ist und im anderen nicht.

Das stimmt. Hatte ich unbeachtet gelassen, weil ich mir dachte: Wenn man den Vater aktivieren will, sieht man das ja eh, um welchen Shop es sich handelt. Aber dafür muss der ja erst mal im Abfrageergebnis enthalten sein. Von hinten gedacht, von vorne gemacht. :D

Meine Abfrage müsste ich jetzt entsprechend anpassen, aber Deine Erlaubnis vorweggenommen, übernehme ich den Approach, auch die Kinder mit auszugeben, einfach in Deinen Code:

SQL:
SELECT DISTINCT 
    tVater.cArtNr AS 'Vater',
    STRING_AGG(CAST(tArtikel.cArtNr AS NVARCHAR(MAX)), ', ') AS 'Kinder'
FROM 
    tArtikel
    INNER JOIN tArtikel AS tVater ON tVater.kArtikel = tArtikel.kVaterArtikel
    INNER JOIN tArtikelShop ON tArtikelShop.kArtikel = tArtikel.kArtikel
    LEFT JOIN tArtikelShop AS tVaterShop ON tVaterShop.kArtikel = tVater.kArtikel AND tVaterShop.kShop = tArtikelShop.kShop
WHERE 
    tArtikel.kVaterArtikel > 0 
    AND tVaterShop.kArtikel IS NULL
GROUP BY 
    tVater.cArtNr;
 
  • Gefällt mir
Reaktionen: zaxxo