![]() |
Datenbank: ORACLE • Version: 9 • Zugriff über: DATABASE
Zwei Tabellen -> Dreifach Joinen ?
Hallo zusammen,
In Tabelle1 sind die Stammdaten. In Tabelle2 die Auftraege. Diese Tabellen sehen so aus: Tabelle.1 Spalte.ID, Spalte.Name 1, Testwert1 2, Testwert2 Tabelle.2 Spalte.ID_Tabelle1, Spalte.Auftrags_Datum, Spalte.Auftragstyp 1, 01.01.2007, 1 1, 25.01.2008, 2 Am Ende soll je nach Auftragstyp die Spalten so gefüllt sein: Gejointe.Tabelle Spalte.ID, Spalte.Auftrags_Datum.1, Spalte.Auftrags_Datum.2, Spalte.Auftrags_Datum.3, Spalte.Name 1, 01.01.2007, 25.01.2008, NULL, Testwert1 2, NULL, NULL, NULL, Testwert2 Es soll also eine Zeile ergeben. Es gibt verschiedene Typen von Aufträgen. Wenn zu Spalte.ID z.B. ein Auftrag mit Auftragstyp1 und einer mit Auftragstyp2 existiert soll in Spalte.Auftrags_Datum.1 das Datum von dem Auftrag mit Auftragstyp1 und in Spalte.Auftrags_Datum.2 das Datum von dem Auftrag mit Auftragstyp2 stehen. Ich hoffe mir kann geholfen werden ;) Gruss Holger |
Re: Zwei Tabellen -> Dreifach Joinen ?
Ich würde Tabelle2 noch einen eigene PK verpassen.
Das Problem an sich kann man mit Subqueries lösen:
SQL-Code:
select
t1.ID, (select Datum from Tabelle2 where ID_Tabelle1 = t1.ID and Typ=1) as Datum1, (select Datum from Tabelle2 where ID_Tabelle1 = t1.ID and Typ=2) as Datum2, (select Datum from Tabelle2 where ID_Tabelle1 = t1.ID and Typ=3) as Datum3, t1.name from Tabelle1 t1; |
Re: Zwei Tabellen -> Dreifach Joinen ?
Vielen dank,
das konnte ich jetzt umsetzen. Um aber dieses anzuwenden, müssen ja vorher die beiden Tabellen gejoint werden, sonst kann ich ja nicht die WHERE - Abfrage machen. Wie joine ich die denn dann vorher am besten ? oder verstehe ich da was falsch ? Gruss Holger |
Re: Zwei Tabellen -> Dreifach Joinen ?
Wie sieht die Bedinmgung aus?
Alternativ kannstz du auch Joins statt Subqueries nehmen |
Re: Zwei Tabellen -> Dreifach Joinen ?
Hi,
habe es nun auch ohne vorher zu joinen hin bekommen. Jetzt muss ich nur noch die Subquery in eine Function kriegen, damit ich die an verschiedenen stellen nutzen kann. Vielleicht eine Idee. Kann ja leider nicht Datum1 an anderer Stelle im SQL wieder verwenden... Bräuchte aber jetzt das Ergebnis Datum1 mehrmals an anderer Stelle. Gruss Holger |
Re: Zwei Tabellen -> Dreifach Joinen ?
Man könnte das in einer Prozedur erledigen
|
Re: Zwei Tabellen -> Dreifach Joinen ?
Du meinst jetzt eine procedure ausserhalb SQL ?
Ich hatte vorher auch alles unter CalcFields. Nur dann konnte ich nach den CalcFields nicht sortieren. Deshalb packe ich das zur Zeit alles in eine RIESIGE SQL - Abfrage. Gruss Holger |
Re: Zwei Tabellen -> Dreifach Joinen ?
Nein ich meinte eine Stored Procedure innerhalb der DB
|
Re: Zwei Tabellen -> Dreifach Joinen ?
Das hört sich interresant an. Wie kann ich das in Delphi realisieren ?
Möchte Quasi diese Abfrage: (Ist ein Teil aus der Gesamt-Query)
Delphi-Quellcode:
... dann wieder verwenden. In dem ich nur 'FESTIGKEITPRUEFUNG' in die nächste Abfrage einbauen muss.
(CASE WHEN
(SELECT AUFTRAGERLEDIGT FROM SYSDBP.DBP_AUFTRAEGE WHERE SYSDBP.DBP_AUFTRAEGE.ANLAGENNUMMER = SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER AND SYSDBP.DBP_AUFTRAEGE.SIGMA_TAETIGKEIT_ID = '133' AND (SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT = (SELECT MAX(SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT) FROM SYSDBP.DBP_AUFTRAEGE WHERE SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER = SYSDBP.DBP_AUFTRAEGE.ANLAGENNUMMER SYSDBP.DBP_LEISTUNGSWERTE.ANZAHL = SYSDBP.DBP_AUFTRAEGE.DB_REGISTER AND SYSDBP.DBP_AUFTRAEGE.SIGMA_AUFTYP_ID = '50' AND SYSDBP.DBP_AUFTRAEGE.STATUS = 'abgeschlossen'))) IS NOT NULL THEN ADD_MONTHS((SELECT AUFTRAGERLEDIGT FROM SYSDBP.DBP_AUFTRAEGE WHERE SYSDBP.DBP_AUFTRAEGE.ANLAGENNUMMER = SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER AND SYSDBP.DBP_AUFTRAEGE.SIGMA_TAETIGKEIT_ID = '133' AND (SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT = (SELECT MAX(SYSDBP.DBP_AUFTRAEGE.AUFTRAGERLEDIGT) FROM SYSDBP.DBP_AUFTRAEGE WHERE SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER = SYSDBP.DBP_AUFTRAEGE.ANLAGENNUMMER AND SYSDBP.DBP_LEISTUNGSWERTE.ANZAHL = SYSDBP.DBP_AUFTRAEGE.DB_REGISTER AND SYSDBP.DBP_AUFTRAEGE.SIGMA_AUFTYP_ID = '50' AND SYSDBP.DBP_AUFTRAEGE.STATUS = 'abgeschlossen'))), FESTIGKEIT_JAHRE * 12) ELSE CASE WHEN FESTIGKEIT_JAHRE <> 0 THEN ADD_MONTHS(TO_DATE('01.01.2006'), FESTIGKEIT_JAHRE * 12) WHEN FESTIGKEIT_JAHRE = 0 THEN NULL END END) AS FESTIGKEITPRUEFUNG, Wie geht das mit der procedure oder function, da ich ja einen Wert an die nächste Abfrage übergeben will. Wie rufe ich dann die Procedure oder Function 'FESTIGKEITPRUEFUNG' auf ? Man sieht ja auch oben, das die 'SELECT AUFTRAGERLEDIGT ...' doppelt ist. Schon den Teil könnte man schön in eine PRocedure oder Function packen. Nur wie läuft das ? Die Abfragen ergeben dann eine grosse TQuery. Gruss Holger |
Re: Zwei Tabellen -> Dreifach Joinen ?
Nicht in Delphi in PL/SQL
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 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