[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2012
    Beiträge
    3

    SQL Abfrage - Bezug Artikelgruppe Lieferanten

    Hallo Leute,
    ich habe ein kleines Problem mit folgender Abfrage:

    Ich habe u.a. 2 Tabellen. Eine mit dem Namen Teil, welche Produkte enthält, die nach ABC Gütern unterteilt sind und
    eine Tabelle Konditionen, die die jeweilige Lieferantennummer zu einem Artikel sowie den Einkaufspreis enthält.

    Nun möchte ich einen beliebigen Lieferanten (hier z.B. Lieferantid = 1) listen lassen, der z.B. die Produkte der Gruppe A nicht liefert.

    Meine Abfrage sieht soweit wie folgt aus:

    Code:
    select k.lieferantid, t.produktbezeichnung from teil t, konditionen k 
    where k.lieferantid = 1
    and not exists (select t.artikelnummer from teil t 
    where t.abcklassifikation = 'A' and t.artikelnummer = k.artikelnummer)
    and t.artikelnummer = k.artikelnummer;
    Hier erhalte ich zwar Artikel, allerdings sind diese von der Produktgruppe B und/oder C die der Lieferant 1 liefert. D.h. die A Produkte werden rausgefiltert.
    Wie kann ich diese anpassen, damit ich mein gewünschtes Ergebnis erhalte? Bzw. ist exists da der richtige Weg für (bin noch SQL Anfänger)?

    Vielen Dank im Voraus.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Da keiner darauf eine Antwort hat, versuche ich es mal:

    Deine Abfrage ist vom Grundsatz her nicht falsch, da du ja eigentlich das korrekte Ergebnis bekommst.
    Du erfährst, dass der Lieferant A-Artikel nicht beliefert sondern nur die B/C-Artikel.

    Allerdings ist die Fragestellung hier noch mal zu prüfen.
    Wenn du B/C-Artikel auch nicht willst, musst du die "abcklassifikation" aus der Abfrage ganz rauslassen.
    Mit anderen Worten:
    Liefert der Lieferant überhaupt etwas, somit also auch keine A-Artikel?

    Hierfür ist aber die Konditionsdatei die falsche Basis, da ja hier die Artikel die geliefert werden drin stehen, somit also mindestens B/C-Artikel, die du ja auch nicht willst.

    Also müsste der Lieferantenstamm mit Konditionen verknüpft werden um eben zu prüfen, ober der Lieferant überhaupt etwas liefert und somit natürlich auch keine A-Artikel.

    select l.lieferantid from lieferant l
    where not exists
    (select * from konditionen k
    where l.lieferantid = k.lieferantid)

    Anmerkung:
    Im Exists-Subselect ist es egal welche Felder angegeben werden, da diese ignoriert werden.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    May 2012
    Beiträge
    3
    Vielen Dank für die Antwort.

    Mit dieser Abfrage erhalte ich aber keine Ausgabe, da bei mir jeder Lieferant was liefert.

    Vielleicht habe ich mich mit meiner Fragestellung etwas unverständlich ausgedrückt. Ich möchte gerne wissen welche Produkte von einem Lieferanten x nicht geliefert werden. Und dies halt z.B. bezogen auf die Produktgruppe A.

    Beispiel:
    Produkt 1, Typ: A
    Produkt 2, Typ: B
    Produkt 3, Typ: C

    Lieferant 1 liefert Produkt 1 und 2:
    -> folglich bei Abfrage dieser LieferantID keine Ausgabe, da alle verfügbaren A Produkte von diesem Lieferanten geliefert werden

    Lieferant 2 liefert Produkt 1 nicht:
    -> folglich bei Abfrage dieser LieferantID Ausgabe: Produkt 1, da dieses Produkt nicht im Lieferprogramm enthalten ist und von der Gruppe A ist

    Ich hoffe das ist so verständlicher, was ich versuche zu erreichen. Aus diesem Grunde hatte ich auch die Konditionsdatei verwendet, da dort alle Artikel gelistet sind.

    Danke auch nochmal für die Anmerkung mit dem Subselect im Exists

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    OK, das ist verständlicher.
    Allerdings ist die Basistabelle dann der Artikelstamm und nicht die Konditionsdatei, da ja die Artikel in dieser fehlen:

    select * from teil t
    where t.abcklassifikation = 'A'
    and not exists
    (select * from konditionen k
    where k.artikelnummer = t.artikelnummer and k.lieferantid=1)

    Damit erhältst du eben die Artikel, die von diesem Lieferanten nicht beliefert werden.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    May 2012
    Beiträge
    3
    Vielen lieben Dank, das klappt wunderbar.

  6. #6
    Registriert seit
    May 2012
    Beiträge
    3
    Ich dachte, ich kenne mich ein wenig mit SQL aus, da mir fortgeschrittene SQL-Kenntnisse bescheinigt wurden. Aber ich hab überall nur 'Bahnhof' gelesen oO
    Ich bin auch auf Techfacts und Chip zu finden! :D

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von ITFreak Beitrag anzeigen
    Ich dachte, ich kenne mich ein wenig mit SQL aus, da mir fortgeschrittene SQL-Kenntnisse bescheinigt wurden. Aber ich hab überall nur 'Bahnhof' gelesen oO
    ... das Problem ist, dass auch diejeningen, die "fortgeschrittene SQL-Kenntnisse" bestätigen meist nur die Baiscs kennen.

    Ich hatte schon mehrfach Anfragen nach Auffrischungsschulungen zum Thema SQL-Abfragen (von allem anderen nicht zu reden), bei denen die Kunden meinten ein Tag würde locker reichen, da alle Teilnehmer SQL könnten. Wir einigen uns dann uns dann i.d.R. auf einen Tag und einen weiteren optionalen Tag.
    ... bislang wurden immer beide Tage gehalten und z.T. wurde sogar noch ein weiterer Tag gebucht.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Dem kann ich nur zustimmen.
    Ich entdecke (auch Dank Birgitta) immer neue Möglichkeiten.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Einfache Abfrage in COBOL/400 mit EXEC SQL
    By AS400-Anfänger in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 27-06-06, 13:18
  2. Abfrage nach <> Ziffern in SQL
    By behmer in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 29-05-06, 12:52
  3. sql abfrage
    By steven_r in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 17-05-06, 15:49
  4. Problem bei Abfrage bei Imbedded SQL
    By cbe in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-06-05, 16:21
  5. sql abfrage mit substring
    By juergenkemeter in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 17-11-04, 14:32

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •