![]() |
Datenbank: Access mdb • Version: 2003 • Zugriff über: SQL / Delphi FireDac
SQL Query um ein Feld erweitern (inner join)
An die Datenbankprofis hier im Forum, mit der Bitte um Hilfe.
Folgende Abfrage funktioniert, aber ich brauche noch ein Feld ArtZusInfo4 aus einer anderen Tabelle sArtikel verknüpft mit ArtNr = ArtLiefArtNr:
SQL-Code:
Mir gelingt es nicht mit inner join die tabelle sArtikel einzubinden und das Feld ArtZusInfo4 zuzufügen.
SELECT
ArtLief.ArtLiefArtnr, ArtLief.ArtLiefBestellNr, ArtLief.ArtLiefEKPreis, extern.brutto, extern.nettopreis, IIF(ArtLief.ArtLiefEKPreis = 0, 0, extern.nettopreis - ArtLief.ArtLiefEKPreis) AS DiffEUR, IIF(extern.brutto = 0, 0, (extern.brutto - extern.nettopreis) * 100 / extern.brutto) AS Rabatt, IIF(DiffEUR = 0, 0, DiffEUR * 100 / ArtLief.ArtLiefEKPreis) AS prozent, ArtLief.ArtEKDatum FROM ArtLief LEFT JOIN ( SELECT * FROM ekpreise IN 'E:\Preisdateien\K000217_p.mdb' ) AS extern ON ArtLief.ArtLiefBestellNr = extern.Artikelnummer WHERE ArtLief.ArtLiefLiefNr = 'K000217' AND extern.Artikelnummer IS NULL; Vielleicht könnte hier mal ein Profi darüber schauen, wo und wie man das noch einbinden könnte. Für Eure Hilfe jetzt schon Vielen Dank. LG Harry |
AW: SQL Query um ein Feld erweitern (inner join)
Bitte beschreibe mal etwas genauer, was Du vorhast.
Wenn ich das zur Zeit richtig interpretiere, möchtest Du aus der Tabelle ArtLief alle Sätze, zu denen es kein Gegenstück in der externen Tabelle ekpreise gibt (AND extern.Artikelnummer IS NULL). Damit dürfte jede Berechnung mit extern.brutto und extern.netto scheitern. Bitte ersetze beim SELECT * den * durch die tatsächlich benötigten Spalten der externen Tabelle. Die macht das Verstehen der externen Daten für externe Helfer einfacher ;-)
SQL-Code:
Funktioniert das? Auf eine mit AS benannte Spalte dann später zugreifen?
IIF(ArtLief.ArtLiefEKPreis = 0, 0, extern.nettopreis - ArtLief.ArtLiefEKPreis) AS DiffEUR,
IIF(DiffEUR = 0, 0, DiffEUR * 100 / ArtLief.ArtLiefEKPreis) AS prozent, Zeig' bitte mal Deine Versuche, in denen Du versucht hast die Tabelle sArtikel einzubinden. Hast Du "einfach nur" kein Ergebnis erhalten oder eine oder mehrere Fehlermeldungen? Wenn Fehlermeldungen, welche? Momentan sehe ich keinen ernsthaften Grund, warum es nicht funktionieren sollte, außer, dass ich mit der korrekten Syntax vom Access-SQL absolut nicht vertraut bin. Ein Versuch:
SQL-Code:
SELECT
ArtLief.ArtLiefArtnr, ArtLief.ArtLiefBestellNr, ArtLief.ArtLiefEKPreis, ArtLief.ArtEKDatum, sArtikel.ArtZusInfo4, -- das Folgende erscheint mir (wegen extern.Artikelnummer IS NULL) sinnfrei, da die Werte immer = Null sind extern.brutto, extern.nettopreis, IIF(ArtLief.ArtLiefEKPreis = 0, 0, extern.nettopreis - ArtLief.ArtLiefEKPreis) AS DiffEUR, IIF(extern.brutto = 0, 0, (extern.brutto - extern.nettopreis) * 100 / extern.brutto) AS Rabatt, IIF(DiffEUR = 0, 0, DiffEUR * 100 / ArtLief.ArtLiefEKPreis) AS prozent -- hier bin ich fast sicher, dass das nicht geht FROM ( ArtLief LEFT JOIN ( SELECT Artikelnummer, Brutto, Netto FROM ekpreise IN 'E:\Preisdateien\K000217_p.mdb' ) AS extern ON ArtLief.ArtLiefBestellNr = extern.Artikelnummer ) INNER JOIN sArtikel ON ArtLief.ArtLiefArtNr = sArtikel.ArtNr WHERE ArtLief.ArtLiefLiefNr = 'K000217' AND extern.Artikelnummer IS NULL |
AW: SQL Query um ein Feld erweitern (inner join)
Danke Delphi.Narium für Deine Unterstützung. Du erweist dich jetzt schon als meine letzte Rettung :)
Ich habe eine externe Preisliste vom Lieferant z.B. K000217 auf USB-Stick E:\Preisdateien\K000217_p.mdb. Da sind die Artikelnummer, Brutto, Rabatt und Nettopreis mit dem glecinamigen Feldern hinterlegt. Jetzt sollen die Preise eingelesen werden. Das läuft. Nun will ich mit button1 sehen, welche Preise erhöht wurden. Ok läuft. Button2 zeigt mir welche Preise gleich geblieben sind, also nicht erhäht wurden. ok, läuft. Button3 zeigt mir welche Artikelpreise günstiger geworden sind, Ok läuft auch. Jetzt brauche ich eine Abfrage, welche Artikel vom Lieferant z.B. K000217 nicht mehr in der externen Preisliste E:\Preisdateien\K000217_p.mdb vorkommen, weil der Lieferant diesen Artikel nicht mehr führt. Also in der externen Tabelle ekPreise nicht mehr existiert. Diese sollen mir angezeigt werden. Mit der Query werden die auch korrekt angezeigt. Das Problem besteht aber darin, dass ich aus der Tabelle sArtikel die Preise holen muss um diese nachher zu aktualisieren. Ich brauche also alle Felder die auch in dieser Query (die läuft) vorhanden sind:
Delphi-Quellcode:
Es müssen also die Felder aus der Tabelle sArtikel - ArtName1, ArtVKPreis_0, ArtVKPreis_1 und ArtZusInfo4 in die Abfrage eingebaut werden:
SELECT
ArtName1, ArtVKPreis_0, ArtVKPreis_1, ArtZusInfo4, ArtLiefLiefNr, ArtLiefArtNr, ArtcDate, ArtLiefBestellNr, ArtLiefEKPreis, extern.brutto, extern.nettopreis, ArtEKDatum, IIF([ArtLiefEKPreis] = 0,0, (extern.nettopreis - ArtLiefEKPreis)) as DiffEUR, IIF([extern.brutto]= 0,0,(extern.brutto-extern.nettopreis)*100/extern.brutto) as Rabatt, IIF([DIFFEur] = 0,0,DiffEUR*100/(ArtLiefEKPreis)) as prozent FROM (ArtLief INNER JOIN (SELECT * FROM ekpreise IN 'E:\Preisdateien\K000217_p.mdb') extern ON ArtLief.ArtLiefBestellnr=extern.Artikelnummer) INNER JOIN sArtikel ON ArtLief.ArtLiefArtNr = sArtikel.ArtNr where ArtLief.ArtLiefLiefNr = 'K000217' order by ArtLiefArtNr;
Delphi-Quellcode:
Genauer kann ich es leider nicht darstellen.
SELECT ArtLief.ArtLiefArtnr, ArtLief.ArtLiefBestellNr, ArtLief.ArtLiefEKPreis,
extern.brutto,extern.nettopreis, IIF([ArtLief.ArtLiefEKPreis] = 0,0, (extern.nettopreis - ArtLief.ArtLiefEKPreis)) as DiffEUR, IIF([extern.brutto]= 0,0,(extern.brutto-extern.nettopreis)*100/extern.brutto) as Rabatt, IIF([DIFFEur] = 0,0,DiffEUR*100/(ArtLief.ArtLiefEKPreis)) as prozent, ArtLief.ArtEKDatum FROM ArtLief LEFT JOIN ( SELECT * FROM ekpreise IN 'E:\Preisdateien\K000217_p.mdb' ) AS extern ON ArtLief.ArtLiefBestellNr = extern.Artikelnummer WHERE ArtLief.ArtLiefLiefNr = 'K000217' and extern.Artikelnummer IS NULL; Meine Query läuft leider nicht und bringt folgende Fehlermeldung obwohl die Zuweisungen korrekt sind: Syntaxfehler (fehlender Operator) in Abfrageausdruck 'ArtLief.ArtLiefBestellNr = extern.Artikelnummer LEFT JOIN sArtikel ON ArtLief.ArtLiefArtnr = sArtikel.ArtNr'
Delphi-Quellcode:
Ich weiß nicht, wo der Fehler liegt. Kannst du nochmals versuchen mir zu helfen?
SELECT ArtLief.ArtLiefArtnr, ArtLief.ArtLiefBestellNr, ArtLief.ArtLiefEKPreis,
extern.brutto, extern.nettopreis, IIF([ArtLief.ArtLiefEKPreis] = 0, 0, (extern.nettopreis - ArtLief.ArtLiefEKPreis)) AS DiffEUR, IIF([extern.brutto] = 0, 0, (extern.brutto - extern.nettopreis) * 100 / extern.brutto) AS Rabatt, IIF([DiffEUR] = 0, 0, DiffEUR * 100 / ArtLief.ArtLiefEKPreis) AS prozent, ArtLief.ArtEKDatum, sArtikel.ArtName1, sArtikel.ArtVKPreis_0, sArtikel.ArtVKPreis_1, sArtikel.ArtZusInfo4 FROM ArtLief LEFT JOIN ( SELECT * FROM ekpreise IN 'E:\Preisdateien\K000217_p.mdb' ) AS extern ON ArtLief.ArtLiefBestellNr = extern.Artikelnummer LEFT JOIN sArtikel ON ArtLief.ArtLiefArtnr = sArtikel.ArtNr WHERE ArtLief.ArtLiefLiefNr = 'K000217' AND extern.Artikelnummer IS NULL; Dein Vorschlag funktioniert leider nicht. LG Harry |
AW: SQL Query um ein Feld erweitern (inner join)
Was funktioniert an meinem Vorschlag nicht?
Fehlermeldung = ? Ergebnis stimmt nicht: zuviele Daten zuwenig Daten Daten doppelt ...? Da ich weder über Access noch über die von Dir genutzten Datenbanken / Tabellen verfüge, muss ich das alles durch die alten grauen Zellen ersetzen. Dazu benötige ich präzise Informationen, sonst wird das scheitern. |
AW: SQL Query um ein Feld erweitern (inner join)
Vielen herzlichen Dank Delphi.Narium!
Dein Vorschlag brachte die Meldung: 2 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben. Dann habe ich das ganze nochmals anhand deines Vorschlages durchdacht. Es fehlten zur Anzeige im Grid noch 2 Felder. Ich habe also vorsichtshalber Artikelnummer, Brutto, Netto von Dir durch * ersetzt und es funktioniert!!!!!! Da bist ein wandelndes Genie! DANKE FÜR DEINE ZEIT DIE DU INVESTIERT HAST MIR ZU HELFEN. Hut ab! LG Harry |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:31 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 by Thomas Breitkreuz