Beantwortet

Bericht - Artikelkategorien als Variablen/Parameter nutzen

  • 29 January 2024
  • 1 Antwort
  • 77 Ansichten

Hallo Xentral Community,

ich habe eine Bericht-Abfrage erstellt, die auch bisher sehr gut funktioniert. Nun möchte ich jedoch, dass man als Parameter bzw. als Filter nach Artikelkategorien suchen/filtern kann. Ich finde einfach keinen Weg um das hinzubekommen. Ich möchte einfach in der Ansicht eine bestimmte Kategorie auswählen und es werden nur Artikel von dieser Kategorie angezeigt und die dazugehörigen Spalten.
Wo liegt mein Fehler?
Vielen Dank im Voraus! :)

SELECT
  a.id AS `artikel-id`,
  a.name_de AS artikelname,
  a.nummer AS artikelnummer,
  CASE
    WHEN a.typ = '1_kat'   THEN 'Nicht zugeordnet'
    WHEN a.typ = '3_kat'   THEN 'Nicht zugeordnet'
    WHEN a.typ = '5_kat'   THEN 'Nicht zugeordnet'
    WHEN a.typ = '699_kat' THEN 'HHC-Vapes'
    WHEN a.typ = '700_kat' THEN 'HHC-Blüten'
    WHEN a.typ = '701_kat' THEN 'HHC-Preroll'
    WHEN a.typ = '702_kat' THEN 'CBD-Vapes'
    WHEN a.typ = '703_kat' THEN 'CBD-Blüten'
    WHEN a.typ = '704_kat' THEN 'CBD-Preroll'
    WHEN a.typ = '705_kat' THEN 'THC-P-Vapes'
    WHEN a.typ = '706_kat' THEN 'THC-P-Blüten'
    WHEN a.typ = '707_kat' THEN 'THC-P-Preroll'
    WHEN a.typ = '708_kat' THEN 'Nikotinsalze'
    WHEN a.typ = '709_kat' THEN 'Shortfill'
    WHEN a.typ = '710_kat' THEN 'Longfill'
    WHEN a.typ = '711_kat' THEN 'Zubehör'
    WHEN a.typ = '712_kat' THEN 'Sweets'
    WHEN a.typ = '713_kat' THEN 'Food'
    WHEN a.typ = '714_kat' THEN 'Frühstück'
    WHEN a.typ = '715_kat' THEN 'Getränke'
    WHEN a.typ = '716_kat' THEN 'Mysterybox'
    WHEN a.typ = '717_kat' THEN 'Vape-Einweg'
    WHEN a.typ = '718_kat' THEN 'Vape-Mehrweg'
    WHEN a.typ = '719_kat' THEN 'SNUS'
    WHEN a.typ = '720_kat' THEN 'Shisha-Kohle'
    WHEN a.typ = '721_kat' THEN 'Shisha-Kohleanzünder'
    WHEN a.typ = '722_kat' THEN 'Shisha-Köpfe'
    WHEN a.typ = '723_kat' THEN 'Shisha-Wasserpfeifen'
    WHEN a.typ = '724_kat' THEN 'Shisha-Zubehör'
    WHEN a.typ = '725_kat' THEN 'Shisha-Tabak'
    WHEN a.typ = '726_kat' THEN 'Snacks'
    WHEN a.typ = '748_kat' THEN 'HHC-Edibles'
    WHEN a.typ = '750_kat' THEN 'CBD-Edibles'
    WHEN a.typ = '753_kat' THEN 'Rauch-Zubehör'
    WHEN a.typ = '754_kat' THEN 'CBD-Öl'
    WHEN a.typ = '770_kat' THEN 'AGSONO'
    ELSE a.Typ
  END AS artikelkategorie,
  CAST(lpi.menge AS DECIMAL(10,0)) AS menge,
  CAST(
    CASE
      WHEN lpi.menge < (SELECT ROUND(AVG(menge),1) FROM lager_platz_inhalt) THEN
        (SELECT ROUND(AVG(menge),1) FROM lager_platz_inhalt) - lpi.menge
      ELSE NULL
    END AS DECIMAL(10,0)
  ) AS unterbestand,
  CAST(
    CASE
      WHEN lpi.menge > (SELECT ROUND(AVG(menge),1) * 2 FROM lager_platz_inhalt) THEN
        lpi.menge - (SELECT ROUND(AVG(menge),1) * 2 FROM lager_platz_inhalt)
      ELSE NULL
    END AS DECIMAL(10,0)
  ) AS ueberbestand,
  md.mhddatum AS MHD,
  (SELECT ep.preis FROM einkaufspreise ep WHERE ep.artikel = a.id ORDER BY ep.preis_anfrage_vom DESC LIMIT 1) AS Einkaufspreis,
  (SELECT ep.ab_menge FROM einkaufspreise ep WHERE ep.artikel = a.id ORDER BY ep.preis_anfrage_vom DESC LIMIT 1) AS Ab_Menge,
  l.Bezeichnung AS Lagerort
FROM lager_platz_inhalt AS lpi
JOIN lager_platz lp ON lpi.lager_platz = lp.id
JOIN artikel a ON lpi.artikel = a.id
LEFT JOIN lager_mindesthaltbarkeitsdatum md ON a.id = md.artikel
LEFT JOIN lager l ON lp.lager = l.id
WHERE 
  (
    (('{ARTIKELKATEGORIE}' IN ('CBD-Vapes', 'Getränke', '719_kat')) AND ('{ARTIKELKATEGORIE}' = a.typ)) OR
    (lpi.menge < (SELECT ROUND(avg(menge),1) FROM lager_platz_inhalt) OR lpi.menge > (SELECT ROUND(avg(menge),1) * 2 FROM lager_platz_inhalt))
  )
ORDER BY artikelname
LIMIT 434340;

 

 

icon

Beste Antwort von Knut N von digitalXL 1 February 2024, 11:38

Original anzeigen

1 Antwort

Benutzerebene 4
Abzeichen +1

Hi Pascal,

nur interessehalber, wurde die Abfrage mit KI erstellt?

Wozu benötigst du den ersten Teil deiner fett gedruckten Abfrage? Ich würde die in-Funktion so nicht nutzen.

Lass einfach einmal den ersten Teil komplett weg:

… WHERE 
  (
    ('{ARTIKELKATEGORIE}' = a.typ) OR ...

Zusätzlich musst du aber auch die Parameterdefinition prüfen, denn in a.typ steht wahrscheinlich 703_kat und nicht “cbd-blüten”, oder? Das kannst du ggf. im Modul Datenbankansicht prüfen.

Wenn du Interesse daran hast, das Statement komplett neu aufzusetzen, kannst du dich gerne mit einer PN melden.

Beste Grüße

Knut

Antworten