Oberhaupt

insomni4

Benutzer
Beiträge
6
Hi,

ich möchte eine SQL-Abfrage machen, die ich leider nicht ganz realisieren kann. Ziel ist es, das Oberhaupt einer Familie zu selektieren, das eine Person in der Kundengruppe hat, der im Jahre 1998 oder später geboren ist. Das Feld "Oberhaupt" = 1, wenn er das Oberhaupt ist und 0 wenn nicht. Ich habe dies erstmal versucht mit einem Subselect zu machen, aber selektiert werden nur alle Personen die später als 1998 geboren sind und Oberhäupte sind, was zum Teil schonmal richtig ist. Nur werden die Oberhäupte in der Kundengruppe, die älter wären nicht angezeigt.

Hat jemand einen Beispiel oder einen Link, wie ich das lösen kann. Vielleicht gibt es da einen Trick die Oberhäupte anzuzeigen, die auch später als 1998 geboren sind in der selben Kundengruppe.

Grüße
 
Werbung:
Hi,

ich möchte eine SQL-Abfrage machen, die ich leider nicht ganz realisieren kann. Ziel ist es, das Oberhaupt einer Familie zu selektieren, das eine Person in der Kundengruppe hat, der im Jahre 1998 oder später geboren ist. Das Feld "Oberhaupt" = 1, wenn er das Oberhaupt ist und 0 wenn nicht. Ich habe dies erstmal versucht mit einem Subselect zu machen, aber selektiert werden nur alle Personen die später als 1998 geboren sind und Oberhäupte sind, was zum Teil schonmal richtig ist. Nur werden die Oberhäupte in der Kundengruppe, die älter wären nicht angezeigt.

Hat jemand einen Beispiel oder einen Link, wie ich das lösen kann. Vielleicht gibt es da einen Trick die Oberhäupte anzuzeigen, die auch später als 1998 geboren sind in der selben Kundengruppe.

Grüße


Zeig bitte Deine Tabelle(n) mit einigen Beispiel-Datensätzen und was bei rauskommen soll.
 
Ich benutze eine vorgefertigte Datenbank von einer Software, und das ist zugemüllt mit unendlich vielen unbrauchbaren Felder. Das heißt bis man sich da einarbeitet, kann das sehr lange dauern. Deshalb habe ich die Tabellen nicht im ersten Posting nicht geschrieben.

Was rauskommen soll ist:
Name, Vorname, Titel, Anrede vom Oberhaupt, der eine Person in der selben Familiengruppe hat, die später als 1997 geboren ist.


Ich hoffe, dass man was von meinem Select versteht:

Select DISTINCT
person.Name,
person.Vorname,
person.Titel,
person.Anrede,

from
kungruppe,
kundengruppe,
KUNDEN,
person
where
and person.id = k_KUNDEN.nperson
and kungruppe.nkundengr = kundengruppe.gruppeid
and kundengruppe.cgruppe = 'Familie'
and kungruppe.loberhaupt = 1
and geburtsjahr > ALL (Select geburtsjahr
From
kungrup,
kundengr,
KUNDEN KUNDEN,
person person
where
and person.id = KUNDEN.nperson
and kungruppe.nkundengr = kundengruppe.gruppeid
and kundengruppe.cgruppe = 'Familie'
and kungruppe.loberhaupt = 0
and geburtsjahr = 1997)
 
Ich habe die Feldernamen ein wenig verändert. Da ist mir ein Fehler anscheinend passiert dabei, danke.
Aber daran liegt es nicht, mein Select funktioniert, macht aber nicht was er tun soll :D.

Select DISTINCT
person.Name,
person.Vorname,
person.Titel,
person.Anrede,

from
kungruppe,
kundengruppe,
KUNDEN,
person
where
and person.id = KUNDEN.nperson
and kungruppe.nkundengr = kundengruppe.gruppeid
and kundengruppe.cgruppe = 'Familie'
and kungruppe.loberhaupt = 1
and geburtsjahr > ALL (Select geburtsjahr
From
kungrup,
kundengr,
KUNDEN KUNDEN,
person person
where
and person.id = KUNDEN.nperson
and kungruppe.nkundengr = kundengruppe.gruppeid
and kundengruppe.cgruppe = 'Familie'
and kungruppe.loberhaupt = 0
and geburtsjahr = 1997)
 

Dein

Code:
ALL (Select geburtsjahr
From
kungrup,
kundengr,
KUNDEN KUNDEN,
person person
where
and person.id = KUNDEN.nperson
and kungruppe.nkundengr = kundengruppe.gruppeid
and kundengruppe.cgruppe = 'Familie'
and kungruppe.loberhaupt = 0
and geburtsjahr = 1997)

wird immer zu ALL(1997) werden, aufgrund der WHERE-Condition ganz am Ende.

Davon abgesehen habe ich nicht viel Lust, ohne Tabellendefinition und ohne expliziete JOIN's das zu entziffern.
 
Werbung:
Mal in Pseudo-Code, ohne dein Statement in irgend einer Art und Weise zu beachten...
Code:
Select *
From deiner_tabelle
where exists(eine andere person als die, die oberhaupt ist)
 
Zurück
Oben