AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Zwei Tabellen -> Dreifach Joinen ?
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei Tabellen -> Dreifach Joinen ?

Ein Thema von HolgerCW · begonnen am 31. Jul 2007 · letzter Beitrag vom 1. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#1

Zwei Tabellen -> Dreifach Joinen ?

  Alt 31. Jul 2007, 11:23
Datenbank: ORACLE • Version: 9 • Zugriff über: DATABASE
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Zwei Tabellen -> Dreifach Joinen ?

  Alt 31. Jul 2007, 11:37
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;
Markus Kinzler
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#3

Re: Zwei Tabellen -> Dreifach Joinen ?

  Alt 31. Jul 2007, 12:55
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Zwei Tabellen -> Dreifach Joinen ?

  Alt 31. Jul 2007, 13:02
Wie sieht die Bedinmgung aus?
Alternativ kannstz du auch Joins statt Subqueries nehmen
Markus Kinzler
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#5

Re: Zwei Tabellen -> Dreifach Joinen ?

  Alt 31. Jul 2007, 13:20
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Zwei Tabellen -> Dreifach Joinen ?

  Alt 31. Jul 2007, 18:34
Man könnte das in einer Prozedur erledigen
Markus Kinzler
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#7

Re: Zwei Tabellen -> Dreifach Joinen ?

  Alt 1. Aug 2007, 07:50
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Zwei Tabellen -> Dreifach Joinen ?

  Alt 1. Aug 2007, 07:56
Nein ich meinte eine Stored Procedure innerhalb der DB
Markus Kinzler
  Mit Zitat antworten Zitat
HolgerCW

Registriert seit: 28. Nov 2006
Ort: Marl
1.207 Beiträge
 
Delphi XE7 Enterprise
 
#9

Re: Zwei Tabellen -> Dreifach Joinen ?

  Alt 1. Aug 2007, 08:19
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:
(CASE WHEN
(SELECT AUFTRAGERLEDIGT FROM SYSDBP.DBP_AUFTRAEGE WHERE SYSDBP.DBP_AUFTRAEGE.ANLAGENNUMMER = SYSDBP.DBP_LEISTUNGSWERTE.ANLAGENNUMMER AND SYSDBP.DBP_AUFTRAEGE.SIGMA_TAETIGKEIT_ID = '133AND
(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 = '50AND 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 = '133AND
(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 = '50AND 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,
... dann wieder verwenden. In dem ich nur 'FESTIGKEITPRUEFUNG' in die nächste Abfrage einbauen muss.

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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Zwei Tabellen -> Dreifach Joinen ?

  Alt 1. Aug 2007, 08:23
Nicht in Delphi in PL/SQL
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:35 Uhr.
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