Anmelden

View Full Version : SQL Subselect



KingofKning
20-02-15, 17:03
Hallo *all,

ich bin gerade dabei eine komplexere SQL-Abfrage (VIEW) zu modifizieren. Bei einem Problem weiß ich noch nicht wie ich es lösen soll.

das ist der Istzustand:

CAST(CASE WHEN T01.ADID6 <> T01.ADKTO THEN SUBSTR(HEX(INT(DIGITS(ADID6))), 4, 6) ELSE SUBSTR(HEX(INT(DIGITS(ADSA16))), 4, 6) END AS CHAR(5) CCSID 273) AS PLKZ

Jetzt muß ich aber prüfen wenn ADID6 = Adkto ist, ob dann in einer Datei ein Satz des Kunden enthalten ist.
Wenn die Anzahl der Sätze größer 0 ist, soll er mir ADID6 ins PLKZ schieben.

Es würde mir auch schon genügen zu sagen:

Wenn Anzahl Sätze in Dat5 mit adid6 > 0 dann adid6 ansonsten adsa16

Ich habe mal Tests gemacht, scheitere aber wohl an der richtigen Syntax:

select adkto, cast(when select * from rptrade/dat005 > 0 then 1 else
2) from adr01pf

Für Hinweise dankbar.

GG

Fuerchau
20-02-15, 17:34
Ein skalarer Subselect muss in Klammern gesetzt werden:

case when (select Count(*) from ... where outerkey=innerkey) > 0 then v1 else v2 end

Über die Performance darfst du dir da nun keine nennenswerten Gedanken machen.
Ab V6 kann man den Subselect ggf. auch einschränken mit "...where ... fetch first 1 rows only", da ja die Anzahl nicht wirklich interessiert.

KingofKning
20-02-15, 18:32
Danke,
ich lerne doch jeden Tag dazu. In 17 Jahre beim Renteneintritt bin ich perfekt und bekomme als Abschiedgeschenk eine AS/400 aus dem Museum.

GG

Fuerchau
21-02-15, 18:29
Davon kann ich mich auch nicht freisprechen, aber ich lerne gerne.