AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL Query um ein Feld erweitern (inner join)

SQL Query um ein Feld erweitern (inner join)

Ein Thema von HCB · begonnen am 3. Feb 2025 · letzter Beitrag vom 4. Feb 2025
Antwort Antwort
HCB

Registriert seit: 12. Feb 2020
214 Beiträge
 
Delphi 12 Athens
 
#1

SQL Query um ein Feld erweitern (inner join)

  Alt 3. Feb 2025, 19:24
Datenbank: Access mdb • Version: 2003 • Zugriff über: SQL / Delphi FireDac
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:
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;
Mir gelingt es nicht mit inner join die tabelle sArtikel einzubinden und das Feld ArtZusInfo4 zuzufügen.
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

Geändert von TBx ( 3. Feb 2025 um 19:33 Uhr) Grund: Delphi-Tags in SQL-Tags gewandelt
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.543 Beiträge
 
Delphi 7 Professional
 
#2

AW: SQL Query um ein Feld erweitern (inner join)

  Alt 3. Feb 2025, 20:22
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:
    IIF(ArtLief.ArtLiefEKPreis = 0, 0, extern.nettopreis - ArtLief.ArtLiefEKPreis) AS DiffEUR,
    IIF(DiffEUR = 0, 0, DiffEUR * 100 / ArtLief.ArtLiefEKPreis) AS prozent,
Funktioniert das? Auf eine mit AS benannte Spalte dann später zugreifen?

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

Geändert von Delphi.Narium ( 4. Feb 2025 um 15:06 Uhr) Grund: Schreibfehler
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
214 Beiträge
 
Delphi 12 Athens
 
#3

AW: SQL Query um ein Feld erweitern (inner join)

  Alt 4. Feb 2025, 17:36
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:
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;
Es müssen also die Felder aus der Tabelle sArtikel - ArtName1, ArtVKPreis_0, ArtVKPreis_1 und ArtZusInfo4 in die Abfrage eingebaut werden:

Delphi-Quellcode:
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;
Genauer kann ich es leider nicht darstellen.

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:
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 = 'K000217AND extern.Artikelnummer IS NULL;
Ich weiß nicht, wo der Fehler liegt. Kannst du nochmals versuchen mir zu helfen?
Dein Vorschlag funktioniert leider nicht.

LG Harry
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.543 Beiträge
 
Delphi 7 Professional
 
#4

AW: SQL Query um ein Feld erweitern (inner join)

  Alt 4. Feb 2025, 18:23
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.
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
214 Beiträge
 
Delphi 12 Athens
 
#5

AW: SQL Query um ein Feld erweitern (inner join)

  Alt 4. Feb 2025, 18:55
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:13 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