Gelöst Eigene Übersicht Versand>Aufträge Artikelmenge über alle Einträge

  • Wichtiger Hinweis Liebe Kunden, solltet Ihr den DATEV Rechnungsdatenservice 2.0 nutzen, dann müsst Ihr bis zum 30.06.2024 JTL-Wawi 1.9 installieren. Danach wird die Schnittstelle für ältere Versionen nicht mehr unterstützt.
  • JTL-Connect 2024: Ihr habt noch kein Ticket? Jetzt Early Bird Ticket zum Vorzugspreis sichern! HIER geht es zum Ticketverkauf

RobinW

Aktives Mitglied
15. Oktober 2018
7
1
Hallo zusammen,

ich habe leider nicht genügend Kenntnisse über SQL, und benötige bei folgender Abfrage Hilfe..

Ich möchte eine eigene Übersicht im Bereich Versand>Aufträge erstellen, die entweder über alle vorhandenen Einträge geht oder alle Markierten, beides wäre ok. Vorzugsweise alle Markierten.
Als Ergebnis möchte ich folgende Übersicht:
Artikelnummer , Artikelname , Menge , Verfügbar(Standardlager) , Lagerbestand(Standardlager) , Lieferstatus , Erscheint am(Datum)

Hierbei soll aus den markierten Aufträgen unter Artikelnummer nur der Basisartikel und keine Stückliste ausgewertet werden und unter Menge die Gesamtsumme pro Artikel in den markierten Aufträgen dargestellt werden.
Alle anderen Spalten sollen Aus dem Artikelstamm gezogen werden.

Über jede Hilfe bin ich sehr dankbar!
Grüße Robin
 

DasPatte

Aktives Mitglied
16. Mai 2018
46
14
Mhm, ich habs dir mal so aufgeschrieben:
  • Lieferstatus
    • OK -> Lieferbar
    • WARTEND -> Nicht lieferbar, aber im Zulauf
    • FEHLT -> Nicht lieferbar, nicht im Zulauf
  • Erscheint am (Datum)
    • Bezieht sich ja nicht auf das Verfügbarkeitsdatum, wann der Artikel wieder auf Lager ist, sondern wann der Artikel überhaupt verfügbar ist. Deswegen habe ich dir beides angezeigt (Unzutreffendes streichen)

SQL:
SELECT v.cArtNr AS ArtNr,[cString] AS ArtName,[fAnzahl] AS Anzahl,[fVerfuegbar] AS Verfügbar,[fLagerbestand] AS Lagerbestand,
CASE
WHEN (nLieferbarStatusEigen = 10) THEN 'OK'
WHEN (nLieferbarStatusEigen = 20) THEN 'WARTEND'
WHEN (nLieferbarStatusEigen > 20) THEN 'FEHLT'
END AS Lieferstatus, dErscheinungsdatum AS ErscheintAm, dZulaufVerfuegbarAm AS ZulaufAm
FROM Verkauf.lvAuftragsposition v JOIN tArtikel t ON t.kArtikel = v.tArtikel_kArtikel
WHERE kBestellung = @Key

Hoffe, das hilft dir weiter.

Gruß Patrick
 
  • Gefällt mir
Reaktionen: lichtblicker:-)

RobinW

Aktives Mitglied
15. Oktober 2018
7
1
Hallo Patrick,

vielen Dank für die schnelle Rückmeldung und deine Abfrage.

Das Ergebnis zeigt auf jeden Fall schon mal die Spalten die ich brauche.
Mit Lieferstatus meinte ich das Feld aus dem Artikelstamm, nicht ob die Ware verfügbar oder im Zulauf ist. Screenshot dazu im Anhang.
Da auch Stücklistenartikel ausgewertet werden, wäre eine weitere Spalte mit dem Inhalt "IstStückliste" ja oder nein hilfreich oder dass keine Stücklisten berücksichtigt werden.

Und was mir bei dem Ergebnis wichtig ist, ist dass mehrere markierte Aufträge ausgewertet werden können.
Dazu auch 2 Screenshots, wenn ich einen Auftrag markiere, erhalte ich eine Abfrage. Wenn ich mehr als einen Auftrag markiere erhalte ich keine Abfrage mehr.

Lieferstatus.png2_Auftrag.png1_Auftrag.png

Vielen Dank für weitere Unterstützung!

Grüße Robin
 
  • Gefällt mir
Reaktionen: lichtblicker:-)

Karobube

Sehr aktives Mitglied
23. September 2020
160
85
Remote via AnyDesk
Firma
contact@karobube.com
Hallo @Robin1996 ,

eine Eigene Übersicht zu mehreren markierten Einträgen war bisher nicht möglich, ist jetzt aber neu ab der 1.7 möglich.
Versuch's mal hiermit, habe ungetestet die Antwort von @DasPatte angepasst, teste es einfach mal, insbesondere den Lieferstatus:

SQL:
SELECT v.cArtNr AS ArtNr,tArtikelBeschreibung.cName AS ArtName,[fAnzahl] AS Anzahl,[fVerfuegbar] AS Verfügbar,[fLagerbestand] AS Lagerbestand,
tLieferstatus.cName AS Lieferstatus, dErscheinungsdatum AS ErscheintAm, dZulaufVerfuegbarAm AS ZulaufAm, CASE WHEN t.kStueckliste = 0 THEN 'NEIN' ELSE 'JA' END AS IstStueckliste
FROM Verkauf.lvAuftragsposition v
JOIN tArtikel t ON t.kArtikel = v.kArtikel
JOIN tSpracheUsed ON nStandard = 1
JOIN tArtikelBeschreibung ON t.kArtikel = tArtikelBeschreibung.kArtikel
    AND tSpracheUsed.kSprache = tArtikelBeschreibung.kSprache
    AND tArtikelBeschreibung.kPlattform = 1
LEFT JOIN tLieferstatus ON tLieferstatus.kLieferStatus = t.kLieferStatus AND tLieferStatus.kSprache = tSpracheUsed.kSprache
WHERE kAuftrag IN (@Keys)

Wenn's geholfen hat, steck gerne dem nächsten Bedürftigen einen 5er zu, Gott vergelt's <3

VG KB
 

Intronic

Aktives Mitglied
28. Februar 2012
37
4
Hi zusammen,

vielen Dank für die Beiträge, die Abfrage von Karobube löst zu 95% auch mein Problem.
Allerdings habe ich noch die Herausforderung, dass ich mit Variationen und Stücklisten arbeite. Da ich mit SQL sehr unerfahren bin, wäre ich für Hilfe sehr dankbar 😇
Hier mal ein vereinfachtes Beispiel einer Ausgabe:

A65989 ist jeweils in der Stückliste einer der darüber angezeigten Variationsartikel

1.png

Ich benötige ein Liste der nicht-Stücklistenartikel, summiert pro Artikelnummer. Die Ausgabe in meinem Beispiel sollte also "ArtNr 65989, Anzahl 3" sein.

Die Stücklistenartikel herauszufiltern habe ich bereits erreicht, durch Ergänzung von "AND t.kStueckliste = 0" an den WHERE Befehl.

Wie schaffe ich es nun die Anzahl je Artikelnummer zu summieren?

Für jemanden der SQL kann ist das bestimmt eine Kleinigkeit 😅

Vielen Dank vorab!

Viele Grüße
Christoph
 

Karobube

Sehr aktives Mitglied
23. September 2020
160
85
Remote via AnyDesk
Firma
contact@karobube.com
Ich benötige ein Liste der nicht-Stücklistenartikel, summiert pro Artikelnummer. Die Ausgabe in meinem Beispiel sollte also "ArtNr 65989, Anzahl 3" sein.

Vielen Dank vorab!
SQL:
SELECT v.cArtNr AS ArtNr,tArtikelBeschreibung.cName AS ArtName,SUM([fAnzahl]) AS Anzahl,[fVerfuegbar] AS Verfügbar,[fLagerbestand] AS Lagerbestand,
tLieferstatus.cName AS Lieferstatus, dErscheinungsdatum AS ErscheintAm, dZulaufVerfuegbarAm AS ZulaufAm, CASE WHEN t.kStueckliste = 0 THEN 'NEIN' ELSE 'JA' END AS IstStueckliste
FROM Verkauf.lvAuftragsposition v
JOIN tArtikel t ON t.kArtikel = v.kArtikel
JOIN tSpracheUsed ON nStandard = 1
JOIN tArtikelBeschreibung ON t.kArtikel = tArtikelBeschreibung.kArtikel
    AND tSpracheUsed.kSprache = tArtikelBeschreibung.kSprache
    AND tArtikelBeschreibung.kPlattform = 1
LEFT JOIN tLieferstatus ON tLieferstatus.kLieferStatus = t.kLieferStatus AND tLieferStatus.kSprache = tSpracheUsed.kSprache
WHERE kAuftrag IN (@Keys) AND t.kStueckliste = 0
GROUP BY t.kArtikel, v.cArtNr, tArtikelBeschreibung.cName, [fVerfuegbar], [fLagerbestand], tLieferstatus.cName,dErscheinungsdatum,dZulaufVerfuegbarAm, t.kStueckliste
 

HMside

Aktives Mitglied
14. April 2019
55
14
SQL:
SELECT v.cArtNr AS ArtNr,tArtikelBeschreibung.cName AS ArtName,SUM([fAnzahl]) AS Anzahl,[fVerfuegbar] AS Verfügbar,[fLagerbestand] AS Lagerbestand,
tLieferstatus.cName AS Lieferstatus, dErscheinungsdatum AS ErscheintAm, dZulaufVerfuegbarAm AS ZulaufAm, CASE WHEN t.kStueckliste = 0 THEN 'NEIN' ELSE 'JA' END AS IstStueckliste
FROM Verkauf.lvAuftragsposition v
JOIN tArtikel t ON t.kArtikel = v.kArtikel
JOIN tSpracheUsed ON nStandard = 1
JOIN tArtikelBeschreibung ON t.kArtikel = tArtikelBeschreibung.kArtikel
    AND tSpracheUsed.kSprache = tArtikelBeschreibung.kSprache
    AND tArtikelBeschreibung.kPlattform = 1
LEFT JOIN tLieferstatus ON tLieferstatus.kLieferStatus = t.kLieferStatus AND tLieferStatus.kSprache = tSpracheUsed.kSprache
WHERE kAuftrag IN (@Keys) AND t.kStueckliste = 0
GROUP BY t.kArtikel, v.cArtNr, tArtikelBeschreibung.cName, [fVerfuegbar], [fLagerbestand], tLieferstatus.cName,dErscheinungsdatum,dZulaufVerfuegbarAm, t.kStueckliste
Hallo Karobube,

danke für das Script. Ich würde gerne nicht die einzelnen Positionen auflisten/summieren, sondern nur die Artikel, ohne dass die Stücklisten-Positionen aufgeführt und gezählt werden. Hättest Du dazu ggf. auch ein passendes Script parat?
 

HMside

Aktives Mitglied
14. April 2019
55
14
Hallo Karobube,

danke für das Script. Ich würde gerne nicht die einzelnen Positionen auflisten/summieren, sondern nur die Artikel, ohne dass die Stücklisten-Positionen aufgeführt und gezählt werden. Hättest Du dazu ggf. auch ein passendes Script parat?

Habe mir zwischenzeitlich selber ein Script erstellt. Da ich kein SQL Crack bin, kann es natürlich sein, dass man es noch einfach oder besser hinbekommt. Optimierungsvorschläge sind daher gerne willkommen.

Code:
SELECT cArtNr, cName, FORMAT(SUM(Anzahl), 'N2') AS Anzahl
FROM (
    SELECT
        cArtNr,
        cName,
        kStuecklistenVater,
  kAuftragPosition,
  SUM([fAnzahl]) AS Anzahl,
        ROW_NUMBER() OVER (PARTITION BY kStuecklistenVater ORDER BY kAuftragPosition) AS RowNum
    FROM Verkauf.lvAuftragsposition
    WHERE kAuftrag IN (@Keys) AND cArtNr != ''
    GROUP BY cArtNr, cName, kStuecklistenVater, kAuftragPosition
) AS RankedResults
WHERE RowNum = 1 OR kStuecklistenVater IS NULL
GROUP BY cArtNr, cName
ORDER BY Anzahl DESC;
 
Zuletzt bearbeitet:

HMside

Aktives Mitglied
14. April 2019
55
14
kleines Update, damit die Sortierung auch korrekt funktioniert:

Code:
SELECT cArtNr AS 'Artikel Nr.', cName AS Name, FORMAT(SUM(Anzahl), 'N2') AS Anzahl
FROM (
    SELECT
        cArtNr,
        cName,
        kStuecklistenVater,
  kAuftragPosition,
  SUM([fAnzahl]) AS Anzahl,
        ROW_NUMBER() OVER (PARTITION BY kStuecklistenVater ORDER BY kAuftragPosition) AS RowNum
    FROM Verkauf.lvAuftragsposition
    WHERE kAuftrag IN (@Keys) AND cArtNr != ''
    GROUP BY cArtNr, cName, kStuecklistenVater, kAuftragPosition
) AS RankedResults
WHERE RowNum = 1 OR kStuecklistenVater IS NULL
GROUP BY cArtNr, cName
ORDER BY CAST(SUM(Anzahl) AS FLOAT) DESC;
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.352
380
In der Unterabfrage hat doch, wenn ich es richtig sehe, fAnzahl den Datentyp decimal. Folglich hat das obige SUM(Anzahl) auch den Datentyp decimal.
Jetzt konvertierst du den Wert mit Format() in eine Zeichenkette. Und um diese dann richtig sortieren zu können, konvertierst du diese Zeichen im GROUP BY in eine Fließkommazahl.
Wozu brauchst du denn das obere Format()?
 

HMside

Aktives Mitglied
14. April 2019
55
14
In der Unterabfrage hat doch, wenn ich es richtig sehe, fAnzahl den Datentyp decimal. Folglich hat das obige SUM(Anzahl) auch den Datentyp decimal.
Jetzt konvertierst du den Wert mit Format() in eine Zeichenkette. Und um diese dann richtig sortieren zu können, konvertierst du diese Zeichen im GROUP BY in eine Fließkommazahl.
Wozu brauchst du denn das obere Format()?
Vielen Dank für deinen Hinweis. So besser?

Code:
SELECT
    cArtNr AS 'Artikel Nr.',
    cName AS Name,
    CAST(SUM(Anzahl) AS DECIMAL(10, 2)) AS Anzahl
FROM (
    SELECT
        cArtNr,
        cName,
        kStuecklistenVater,
        kAuftragPosition,
        SUM(fAnzahl) AS Anzahl,
        ROW_NUMBER() OVER (PARTITION BY kStuecklistenVater ORDER BY kAuftragPosition) AS RowNum
    FROM Verkauf.lvAuftragsposition
    WHERE kAuftrag IN (@Keys) AND cArtNr != ''
    GROUP BY cArtNr, cName, kStuecklistenVater, kAuftragPosition
) AS RankedResults
WHERE RowNum = 1 OR kStuecklistenVater IS NULL
GROUP BY cArtNr, cName
ORDER BY SUM(Anzahl) DESC;
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.352
380
Vielen Dank für deinen Hinweis. So besser?
Ah - jetzt verstehe ich erst, was du vorhast:
Dir gings wohl nur um die Anzeige der Nachkommastellen.

Ich kann dein Query bei mir nicht testen, weil ich eine andere Datenbankversion habe.
Du kannst aber immer wenn du was änderst die Laufzeit der Abfrage ankucken, um zu entscheiden, was besser ist (so wie z.b. hier FORMAT()/CAST()
Also temporär einfügen:
Code:
SET STATISTICS IO, TIME ON;
...Quey...
SET STATISTICS IO, TIME OFF;

Du solltest dir bei solchen Dingen, die du dir als "Eigene Übersicht" einbaust auch immer ganz genau den Ausfürhrungsplan anschauen.

Und prüfe mal, ob du das Subquery bauchst (ob evtl ein JOIN schneller ist....)

Falls aber die Performance in den Eigenen Übersichten ausreichend gut ist und dir deine bisherige Abfrage die Daten so liefert wie du sie willst, brauchst du ja auch nicht weiter daran rumbasteln ;)
 

Ähnliche Themen