![]() |
Datenbank: Access • Version: 2003 • Zugriff über: FireDac
Access SQL Hilfe für Query gesucht
Hallo Programmierprofis,
ich möchte gerne sehen, welche Artikel aus einem Angebot nicht gekauft wurden. Bis jetzt sieht meine Abfrage so aus: (Hier zeigt es die 4 angebotenen Artikel aus dem Angebot(Offer) korrekt)
Delphi-Quellcode:
der Kunde hat aber nur einen Artikel aus dem Angebot bestellt und die dazugehörige Rechnung wird hier korrekt angezeigt)
SELECT A.ABFDocErfNr,A.ABFDocKundenNr,B.ABFPosArtNr,B.ABFPosName1
FROM ABFPos AS B INNER JOIN ABFDok AS A ON B.ABFPosDocId = A.ABFDocID where A.ABFDocErfNr like 'O*' and B.ABFPosType = 0 and A.ABFDocKundenNr = 'D018543';
Delphi-Quellcode:
Das Problem das ich habe ist, zu vergleichen welche Artikelnummern aus dem Angebot sich nicht in der Rechnung wiederfinden. Damit ich nur die Artikel sehe, welche nicht bestellt wurden (vermutlich zu teuer). Die Erfassungsnummern für Angebote beginnen mit O, die Lieferscheine mit L und Rechnungen mit R.
SELECT A.ABFDocErfNr,A.ABFDocKundenNr,B.ABFPosArtNr,B.ABFPosName1
FROM ABFPos AS B INNER JOIN ABFDok AS A ON B.ABFPosDocId = A.ABFDocID where A.ABFDocErfNr like 'R*' and B.ABFPosType = 0 and A.ABFDocKundenNr = 'D018543'; Würde mir jemand eine Hilfestellung dazu geben? Wie würdet Ihr das lösen? Ich freue mich über jeden Tipp, Vielen Dank. LG Harry |
AW: Access SQL Hilfe für Query gesucht
einfach das andere Statement komplett als
Delphi-Quellcode:
mit anhängen
where not exists(....)
oder ein LEFT JOIN gegegen das andere Dokument und ein
Delphi-Quellcode:
auf das ID-Feld davon ins WHERE.
IS NULL
|
AW: Access SQL Hilfe für Query gesucht
Danke himitsu,
die Dokumente Angebot und Rechnung liegen in der selben Tabelle ABFDok, die Artikel-Positionen dazu in der Tabelle ABFPos. Nun müsste ich zuerst das Angebot holen und mit der zugehörigen Rechnung vergleichen, ob auch alle angebotenen Artikel sich auf der Rechnung befinden. Wenn nicht, sollte die Abfrage nur die Positionen auswerfen, die nicht auf der Rechnung sind. Mit 'where not exists' hat es nicht funktioniert. Vielleicht habe ich die Abfrage falsch. LG Harry |
AW: Access SQL Hilfe für Query gesucht
Wenn ich die SQL-Satements richtig interpretiere, vergleichst du alle Angebote mit allen Rechnungen des Kunden (like O*, bzw like R*).
In deiner Ausgangsvoraussetzung schreibst du aber, dass du nur die Rechnung zum zugehörigen Angebot vergleichen willst. Kann es sein, dass dir im SQL noch die passende Verknüpfung fehlt? Ansonsten einfach mal deinen Versuch mit dem "not Exists" hier zeigen. |
AW: Access SQL Hilfe für Query gesucht
Hier so wie ich es probiert habe:
Delphi-Quellcode:
LG Harry
SELECT A.ABFDocErfNr,A.ABFDocKundenNr,B.ABFPosArtNr,B.ABFPosName1
FROM ABFPos AS B INNER JOIN ABFDok AS A ON B.ABFPosDocId = A.ABFDocID where A.ABFDocErfNr like 'O*' and B.ABFPosType = 0 and A.ABFDocKundenNr = 'D018543' where not exists (SELECT A.ABFDocErfNr,A.ABFDocKundenNr,B.ABFPosArtNr,B.ABFPosName1 FROM ABFPos AS B INNER JOIN ABFDok AS A ON B.ABFPosDocId = A.ABFDocID where A.ABFDocErfNr like 'R*' and B.ABFPosType = 0 and A.ABFDocKundenNr = 'D018543' ) |
AW: Access SQL Hilfe für Query gesucht
Da bestätigt sich mein Verdacht, dass du ALLE Angebote mit ALLEN Rechnungen des Kunden vergleichst. Außerdem brauchst du noch die Verbindung der Angebotspositionen zu den Rechnungspositionen
Du musst daher deine "like" anpassen. und die Artikelverbindung einbauen. Etwa so:
Code:
Angebotsnummer und Rechnungsnummer musst du natürlich noch eintragen. Vermutlich lässt sich das auch voneinander ableiten, aber dafür müsste man den DB-Aufbau kennen. Ich habe noch die Aliase angepasst, damit man die Artikelverbindung erstellen kann. Ich bin jetzt davon ausgegangen, dass dafür die Artikelnummer verwendet werden muss. Aber auch das hängt vom DB-Aufbau ab.
SELECT A.ABFDocErfNr,A.ABFDocKundenNr,B.ABFPosArtNr,B.ABFPosName1
FROM ABFPos AS B INNER JOIN ABFDok AS A ON B.ABFPosDocId = A.ABFDocID where A.ABFDocErfNr = 'Angebotsnummer' and B.ABFPosType = 0 and A.ABFDocKundenNr = 'D018543' where not exists (SELECT 1 FROM ABFPos AS BB INNER JOIN ABFDok AS AA ON BB.ABFPosDocId = AA.ABFDocID where AA.ABFDocErfNr = 'Rechnungsnummer' and BB.ABFPosType = 0 and AA.ABFDocKundenNr = 'D018543' and BB.Artikelnummer = B.Artikelnummer ) |
AW: Access SQL Hilfe für Query gesucht
Vielen lieben Dank Jasocul, leider bringt mir das jetzt einen Fehler:
Syntaxfehler (fehlender Operator) in Abfrageausdruck 'A.ABFDocErfNr = 'O004714' and B.ABFPosType = 0 and A.ABFDocKundenNr = 'D018543' where not exists (SELECT FROM ABFPos AS BB INNER JOIN ABFDok AS AA ON BB.ABFPosDocId = AA.ABFDocID where AA.ABFDocErfNr = 'R042118' and BB.ABFPosType = 0 and AA.ABFDocKundenNr = 'D018543' and BB.Artikelnummer = B.Artikelnummer )' so lautet nun die Abfrage die den Fehler bringt:
Delphi-Quellcode:
Welcher Operator fehlt denn hier? Kann leider nichts erkennen. Bin Anfänger was die Programmierung mit Delphi betrifft :oops:
SELECT A.ABFDocErfNr,A.ABFDocKundenNr,B.ABFPosArtNr,B.ABFPosName1
FROM ABFPos AS B INNER JOIN ABFDok AS A ON B.ABFPosDocId = A.ABFDocID where A.ABFDocErfNr = 'O004714' and B.ABFPosType = 0 and A.ABFDocKundenNr = 'D018543' where not exists (SELECT FROM ABFPos AS BB INNER JOIN ABFDok AS AA ON BB.ABFPosDocId = AA.ABFDocID where AA.ABFDocErfNr = 'R042118' and BB.ABFPosType = 0 and AA.ABFDocKundenNr = 'D018543' and BB.Artikelnummer = B.Artikelnummer ) |
AW: Access SQL Hilfe für Query gesucht
2 mal WHERE geht nicht, das hat mit Delphi nichts zu tun.
|
AW: Access SQL Hilfe für Query gesucht
Den Fehler habe ich übersehen. Das zweite "where" in der Hauptabfrage durch ein "and" ersetzen sollte genügen.
Im Subselect (nach dem "not exists") muss nach dem select noch irgendwas stehen. Ich trage da meistens eine "1" ein, da Feldinhalte an der Stelle keine Rolle spielen. Man kann aber auch ein "*" oder Feldnamen eintragen. |
AW: Access SQL Hilfe für Query gesucht
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
jetzt hab ich den Fehler: 2 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben! Mit dieser Änderung:
Delphi-Quellcode:
Zur besseren Übersicht anbei der Inhalt der Tabellen.
SELECT A.ABFDocErfNr,A.ABFDocKundenNr,B.ABFPosArtNr,B.ABFPosName1
FROM ABFPos AS B INNER JOIN ABFDok AS A ON B.ABFPosDocId = A.ABFDocID where A.ABFDocErfNr = 'O004714' and B.ABFPosType = 0 and A.ABFDocKundenNr = 'D018543' and not exists (SELECT 1 FROM ABFPos AS BB INNER JOIN ABFDok AS AA ON BB.ABFPosDocId = AA.ABFDocID where AA.ABFDocErfNr = 'R042118' and BB.ABFPosType = 0 and AA.ABFDocKundenNr = 'D018543' and BB.Artikelnummer = B.Artikelnummer ) LG Harry |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz