Hi,
ich will aus einer Reihe von Aufträgen, die aus mehreren
Positionen bestehen (können), all die Positionen selektieren,
die zu den Aufträgen gehören, die mindestens eine Position des
Typs haben, die einer bestimmten Bedingung genügt. Klar?
Ja, einigermaßen 
Geht das mit having??
Nein, Gruppenfunktionen (Aggregationsfunktionen) werden benötigt, um einzelne Datensätze anhand eines Merkmals zu Gruppen zusammenzufassen. Eine Having-Klausel ist nichts anderes als eine Where-Klausel, die sich auf das Ergebnis einer Aggregationsfunktion auswirkt, etwa
having count(*) > 5
(zähle die Datensätze gruppenweise, und zeige nur die Gruppen auf, bei denen das Ergebnis dieser Zählung größer 5 ist).
select (alle Angaben zu den Positionen)
from aufk k,
aufp p,
art a
[und spätestens hier hakt die Logik]
group by (???)
having a.argrp_wg_kng = 06 and a.argrp_wu_kng = 08 and
a.argrp_ag_kng = 02
Hier ist eine Where-Klausel mit Exists-Statement gefragt:
select p.*
from aufk k,
aufp p
where k.aufk_id = p.fk_aufk_id
and exists (select ‚x‘
from aufp p1, art a
where p1.fk_art_id = a.art_id
and a.argrp_wg_kng = 06
and a.argrp_wu_kng = 08
and a.argrp_ag_kng = 02
and p1.fk_aufk_id = p.aufk_id
)
Zu Deutsch: Gib mir alle Positionen zu diejenigen Aufträgen,
für die mindestens eine Position existiert, die die Bedingungen erfüllt.
Ich weiß nicht, mit welchem RDBMS Du arbeitest (das ist hilfreich für solche Anfragen), aber das hier dürfte ANSI-konform sein und zumindest unter Oracle, Informix, DB2 und wahrscheinlich auch MS-SQL arbeiten.
Gruß
J.