Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Abfrage in Firebird DB über 6 Tabellen (https://www.delphipraxis.net/193791-abfrage-firebird-db-ueber-6-tabellen.html)

daniel775 10. Sep 2017 19:13

AW: Abfrage in Firebird DB über 6 Tabellen
 
OK, ihr habt mich geschafft. Ganz durcheinander!

nahpets 10. Sep 2017 19:38

AW: Abfrage in Firebird DB über 6 Tabellen
 
Mir ist zwar nicht klargeworden, was Du genau möchtest, aber eventuell kommt das ja Deinen Vorstellungen näher:
SQL-Code:
SELECT
  k.Firmenname,
  k.KREDITORNR,
  KP.sdatetime,
  KP.LISTENPREIS_NETTO,
  KP.EKPREIS_NETTO,
  max(KP.sDatetime) as Datum
FROM
  Kreditoren as k
  join Rel_Kreditor_Artikel KAr on k.ID = KAr.Kreditor_ID
  join Artikel A on A.ID = KAr.Art_ID
  join Kreditor_Artikel KA on KA.ID = KAr.Kreditor_Art_ID
  join Rel_Kred_Art_Preise KAPr on KAPr.Kreditor_Art_ID = KA.ID
  join Kreditor_Preise KP on KAPr.Kreditor_Preise_ID = KP.ID
group by
  k.FIRMENNAME,
  k.KREDITORNR,
  KP.sdatetime,
  KP.LISTENPREIS_NETTO,
  KP.EKPREIS_NETTO;

daniel775 10. Sep 2017 19:42

AW: Abfrage in Firebird DB über 6 Tabellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
OK, ein Fehler war, das in der Tabelle "Rel_Kred_Art_Preise" die Datensätze für die Zuordnung fehlten.
Jetzt sieht das Ergebnis mit folgender Abfrage so aus:

SELECT k.Firmenname, k.KREDITORNR, KP.sdatetime, KP.LISTENPREIS_NETTO, KP.EKPREIS_NETTO
FROM
Kreditoren as k
join Rel_Kreditor_Artikel KAr on k.ID = KAr.Kreditor_ID
join Artikel A on A.ID = KAr.Art_ID
join Kreditor_Artikel KA on KA.ID = KAr.Kreditor_Art_ID
join Rel_Kred_Art_Preise KAPr on KAPr.Kreditor_Art_ID = KA.ID
join Kreditor_Preise KP on KAPr.Kreditor_Preise_ID = KP.ID
group by k.FIRMENNAME, k.KREDITORNR, KP.sdatetime, KP.LISTENPREIS_NETTO, KP.EKPREIS_NETTO;


Ergebnis SQL-Query siehe Anhang

daniel775 10. Sep 2017 19:46

AW: Abfrage in Firebird DB über 6 Tabellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
@ nahpets

Das Ergebnis ist (Siehe Anhang)



Gewünscht ist NUR Datensatz Nr. 2 und 4

p80286 11. Sep 2017 16:21

AW: Abfrage in Firebird DB über 6 Tabellen
 
Zitat:

Zitat von TBx (Beitrag 1380728)
SQL-Code:
where 1=1
  and max(KP.SDATETIME) as datum
sollte da mal korrigiert werden, die erste Zeile enthält eine überflüssige Bedingung, da immer erfüllt und die zweite Zeile enthält nur einen Ausdruck, keine Bedingung.

Oh pardon, da hab ich den typischen CopynPaste-Mist gebaut.
Das 1=1 oder 1=2 nutze ich um die angefragten Felder(Namen) zurück zu bekommen und um ggf. Konstrukte wie
Delphi-Quellcode:
 sqltxt.Add(' and Feld=wert ';
 sqltxt.Add(' and Person.sex=female';
 if irgendeinwert then
  sqltxt.Add(' and Feld2 is not null';
enzusetzen. Ist nur meine pers. Marotte.

Um die beiden Datensätze mit dem neuesten/jüngsten Datum zu erhalten mußt Du jetzt nur noch Deinen ursprünglichen Ansatz verfolgen:
SQL-Code:
  .....
  join (select k.id,max(KP.ABDatum) datum
FROM
   Kreditoren as k
     join Rel_Kreditor_Artikel KAr on k.ID=KAr.Kreditor_ID
     join Kreditor_Artikel KA on KA.ID=KAr.Kreditor_Art_ID
     join Rel_Kred_Art_Preise KAPr on KAPr.Kreditor_Art_ID=KA.ID
     Join Kreditor_Preise KP on KAPr.Kreditor_Preise_ID=KP.ID
Group by k.ID  ) mindate on (mindate.id=k.id and mindate.datum=kp.sdatetime)
ggf. mußt Du noch die Aliase und das/die Datumsfelder anpassen, aber ich hoffe das Prinzip ist deutlich geworden.

Gruß
K-H

daniel775 12. Sep 2017 09:04

AW: Abfrage in Firebird DB über 6 Tabellen
 
TOP! :thumb: Herzlichen Dank.
Die komplette geglückte Abfrage sieht nun so aus:
Code:
SELECT
  k.Firmenname,
  k.KREDITORNR,
  mindate.datum,
  KP.LISTENPREIS_NETTO,
  KP.EKPREIS_NETTO,
  KP.RABATTWERT,
  KP.EKPREIS_NETTO_NETTO
FROM
  Kreditoren as k
  join Rel_Kreditor_Artikel KAr on k.ID = KAr.Kreditor_ID
  join Artikel A on A.ID = KAr.Art_ID
  join Kreditor_Artikel KA on KA.ID = KAr.Kreditor_Art_ID
  join Rel_Kred_Art_Preise KAPr on KAPr.Kreditor_Art_ID = KA.ID
  join Kreditor_Preise KP on KAPr.Kreditor_Preise_ID = KP.ID
  join (select k.id, max(KP.SDATETIME) as datum
  from
  Kreditoren as k
  join Rel_Kreditor_Artikel KAr on k.ID = KAr.Kreditor_ID
  join Kreditor_Artikel KA on KA.ID = KAr.Kreditor_Art_ID
  join Rel_Kred_Art_Preise KAPr on KAPr.Kreditor_Art_ID = KA.ID
  join Kreditor_Preise KP on KAPr.Kreditor_Preise_ID = KP.ID
group by k.id
) mindate
on mindate.id=k.id and mindate.datum=KP.sdatetime
group by
  k.FIRMENNAME,
  k.KREDITORNR,
  mindate.datum,
  KP.LISTENPREIS_NETTO,
  KP.EKPREIS_NETTO,
  KP.RABATTWERT,
  KP.EKPREIS_NETTO_NETTO;


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz