AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Abfrage in Firebird DB über 6 Tabellen

Abfrage in Firebird DB über 6 Tabellen

Ein Thema von daniel775 · begonnen am 9. Sep 2017 · letzter Beitrag vom 12. Sep 2017
Antwort Antwort
Seite 2 von 2     12
daniel775

Registriert seit: 27. Nov 2010
46 Beiträge
 
#11

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 10. Sep 2017, 20:13
OK, ihr habt mich geschafft. Ganz durcheinander!
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#12

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 10. Sep 2017, 20:38
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;
  Mit Zitat antworten Zitat
daniel775

Registriert seit: 27. Nov 2010
46 Beiträge
 
#13

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 10. Sep 2017, 20:42
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
Miniaturansicht angehängter Grafiken
ergebnismenge.jpg  
  Mit Zitat antworten Zitat
daniel775

Registriert seit: 27. Nov 2010
46 Beiträge
 
#14

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 10. Sep 2017, 20:46
@ nahpets

Das Ergebnis ist (Siehe Anhang)



Gewünscht ist NUR Datensatz Nr. 2 und 4
Miniaturansicht angehängter Grafiken
ergebnismenge.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.658 Beiträge
 
Delphi 7 Personal
 
#15

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 11. Sep 2017, 17:21
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
daniel775

Registriert seit: 27. Nov 2010
46 Beiträge
 
#16

AW: Abfrage in Firebird DB über 6 Tabellen

  Alt 12. Sep 2017, 10:04
TOP! 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;
  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 +2. Es ist jetzt 22:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf