Subselect mit mehr als einer Zeile

Hi

ich hab ein kleines Problem mit einer Subquery.
Und mache zu allem Überfluss meine ersten tapsigen Schritte in SQL.
Ich muss mir einen Wert aus einer andren Tabelle holen.

Also das ganze sieht so aus:
Select Akte.Az,

(if
Kuerzel = ‚S01-P‘ or
Kuerzel = ‚S01MG‘ or
Kuerzel Like ‚S30%‘ or
Kuerzel Like ‚S06%‘ or
Kuerzel = ‚S31Gl‘ or
Kuerzel = ‚S32Gl‘ or
Kuerzel = ‚S33Gl‘ or
Kuerzel = ‚VAGI‘ or
Kuerzel = ‚TVAGI‘ or
Kuerzel = ‚A52Gl‘ or
Kuerzel = ‚A53Gl‘ or
Kuerzel = ‚A55Gl‘ or
Kuerzel = ‚A63Gl‘ or
Kuerzel = ‚KA02‘
then Betrag
endif) as Gebühren,

(If
Kuerzel Like ‚B02%‘ or
Kuerzel Like ‚B03%‘ or
Kuerzel Like ‚B07%‘ or
Kuerzel= ‚KSV-L‘ or
Kuerzel= ‚K27‘ or
Kuerzel Like ‚B01%‘ or
Kuerzel= ‚B09Gl‘ or
Kuerzel= ‚B10Gl‘ or
Kuerzel= ‚B11Gl‘ or
Kuerzel= ‚B13Gl‘ or
Kuerzel= ‚B69Gl‘ or
Kuerzel= ‚K02‘ or
Kuerzel= ‚K05‘ or
Kuerzel= ‚K12‘ or
Kuerzel= ‚K10‘ or
Kuerzel= ‚B125‘
then Betrag
endif) as Auslagen,

(if
Kuerzel= ‚Z4T‘ or
Kuerzel= ‚Z40‘ or
Kuerzel= ‚Z4R‘ or
Kuerzel= ‚ZSTGl‘ or
Kuerzel= ‚ZSAGl‘
then
(select

buchung.Betrag as cglhf
from Buchung
join Vorgang on Buchung.Vg_ID = Vorgang.Vg_ID
join AnsprKto on buchung.AnsprKto_Id = AnsprKto.AnsprKto_ID
where Kennung = ‚GlHF‘
)
endif) as ‚ZA Hpt‘,

Ich brauche also eine Zeile, die Buchung, bzw. cglhf als ZA Hpt ausgibt.
Jetzt bekomm ich aber nur eine Zeile als Ergenis. Kann man auch eine Subquery erstellen die mehr als eine Zeile zurückliefert?

Servus,

was für eine Art von Datenbank/SQL-Sprache? MySQL oder Oracle?

SELECT akte.az,
–> Bei Oracle geht das:
CASE
WHEN Kuerzel = ‚S01-P‘ or
Kuerzel = ‚S01MG‘ or
Kuerzel Like ‚S30%‘ or
Kuerzel Like ‚S06%‘ or
Kuerzel = ‚S31Gl‘ or
Kuerzel = ‚S32Gl‘ or
Kuerzel = ‚S33Gl‘ or
Kuerzel = ‚VAGI‘ or
Kuerzel = ‚TVAGI‘ or
Kuerzel = ‚A52Gl‘ or
Kuerzel = ‚A53Gl‘ or
Kuerzel = ‚A55Gl‘ or
Kuerzel = ‚A63Gl‘ or
Kuerzel = ‚KA02‘ THEN
Betrag
END as Gebühren,

–> der SUB-Select darf nur einen Wert zurückgeben.
–> Hier empfehlen sich mathematische Funktionen wie:
–> SUM(), MIN(), MAX() oder AVG() z.B.:
CASE
WHEN Kuerzel= ‚Z4T‘ or
Kuerzel= ‚Z40‘ or
Kuerzel= ‚Z4R‘ or
Kuerzel= ‚ZSTGl‘ or
Kuerzel= ‚ZSAGl‘ THEN
(SELECT SUM(buchung.Betrag)
FROM Buchung
join Vorgang on Buchung.Vg_ID = Vorgang.Vg_ID
join AnsprKto on buchung.AnsprKto_Id = AnsprKto.AnsprKto_ID
where Kennung = ‚GlHF‘)
END as cglhf

FROM akte

Hoffe es hilt ein bissl

Gruß
Andreas

Weder noch:wink:
Ist Branchensoftware. Der Dialekt schimpft sich wohl iSQL.

Funktionieren tut es… naja, de Abfrage läuft, also kann unser SQL das auch. Allerdings stimmen die Werte vorne und hinten nicht.

Weder noch:wink:
Ist Branchensoftware. Der Dialekt schimpft sich wohl iSQL.

iSQL ist mir gänzlich unbekannt - dennoch wird es wohl nicht die Möglichkeit geben, Sub-Selects mit mehr als einer Rückgabezeile zu entwerfen.

Ohne die Tabellen bzw. die Datenstruktur direkt vor sich zu sehen ist es leider schwer zu helfen.

Momentan würde ich meinen, dass man nur mit direkter Programmierung (PL/Sql) zum Ziel kommen kann. SQL kann mehere Zeilen in einem Sub-Select nicht handeln, was auch klar ist, wenn man sich das Ergebnis der Zeilen/Datensätze vor Auge führt.

Gruß
Andreas

Naja…wer weiß ob ich das nicht völlig falsch verstanden hab:wink:

Hi,
wie unten schon von wem anders erwähnt muss ein subselect immer einen Wert zurückliefern. Wie sollte das Ergebnis auch aussehen … man hätte dann ja eine Zeile vom Hauptselect, die mehrere Zeilen aus dem Subselect enthält.

Daher die Gegenfrage: Wie soll das Ergebnis aussehen? Cool wäre ein vollständiges kleines Skript das Tabellen anlegt, mit Daten befüllt und dann händisch das gewünschte Ergebnis. Dabei die Sachn Weglassen, die nichts mit dem Problem zu tun haben.

Eventuell ist das was du suchst mehr ein Join? Da kannst du in jeder der beteiligten Tabellen beliebig viele Datensätze haben, aller dings multipliziert sich dann gegebenenfalls die anzahl der Ergebnisdatensätze …

Jens