Hilfe bei Select Abfrage ( Fallunterscheidung)

skyerjoe

Aktiver Benutzer
Beiträge
32
Hallo miteinander,

Ich Probleme eine Select Abfrage effizient so zu gestalten, dass ich alle Möglichkeiten abdecken kann.

Es ist ähnlich wie bei meinem anderen Select doch dazu später mehr:

Hier ist mal der Select sehr stark gekürzt von den Select Feldern her aber mit allen relevanten Daten:

Code:
select
relfba.ANR,
RELZTSPE.Sprache as lang1,
RELZTZB.Sprache as lang2,
RELZTLB.Sprache as lang3
from infor.relfba
inner join infor.relacp relacp on
relfba.MNR = relacp.MNR
left outer join  infor.reltext reltext on
relfba.textnr = reltext.TEXTNR
left outer JOIN INFOR.RELZTLB RELZTLB
ON (RELACP.TEXT0 = RELZTLB.ZTKEY)
left outer JOIN INFOR.RELZTSPE RELZTSPE
ON (RELACP.TEXT1 = RELZTSPE.ZTKEY)
left outer JOIN INFOR.RELZTZB RELZTZB
ON (RELACP.ZBED = RELZTZB.ZTKEY)
--AND RELZTSPE.Sprache = 'de'
AND RELZTZB.Sprache = 'de'
--AND RELZTLB.Sprache = 'de'

Da dieser Code sich doch relativ and diesem Problem orientiert, habe ich den mal probiert in diesen zu integrieren.


Code:
SELECT t.*
FROM (
SELECT
ROW_NUMBER () OVER (
PARTITION BY relfba.UTNR
ORDER BY relfba.ANR,
( CASE RELZTZB.Sprache WHEN N'' || 'de' THEN 1 WHEN N'' || 'us' THEN 2 ELSE 9 END )
) AS rnk,
( CASE RELZTZB.Sprache WHEN N'' || 'de' THEN 1 WHEN N'' || 'us' THEN 2 ELSE 9 END ) as case,
relfba.ANR,
RELZTSPE.Sprache as lang1,
RELZTZB.Sprache as lang2,
RELZTLB.Sprache as lang3
from infor.relfba
inner join infor.relacp relacp on
relfba.MNR = relacp.MNR
left outer join  infor.reltext reltext on
relfba.textnr = reltext.TEXTNR
left outer JOIN INFOR.RELZTLB RELZTLB
ON (RELACP.TEXT0 = RELZTLB.ZTKEY)
left outer JOIN INFOR.RELZTSPE RELZTSPE
ON (RELACP.TEXT1 = RELZTSPE.ZTKEY)
left outer JOIN INFOR.RELZTZB RELZTZB
ON (RELACP.ZBED = RELZTZB.ZTKEY)
where saint =  '10'
--AND RELZTSPE.Sprache = 'de'
AND RELZTZB.Sprache = 'de'
--AND RELZTLB.Sprache = 'de'
) t
WHERE t.rnk = 1
-- and company = '10387'
ORDER BY t.ANR

Glaube das müßte soweit hinhauen...

Das Problem ist nur, dass diesmal ich keine ID zur hand habe wie bei der anderen Abfrage die ich als where Klausel benutzen kann und die Datensätze mit sämtlichen Kombinationen an Sprachen auftreten können.

Folglich bräuchte ich eine IF then Abfrage mit else Funktion für jede Sprachkombination.

RELZTSPE.Sprache = 'de'; 'us'; 'de'; 'de'; 'de' ; 'us'; 'us'; 'us' ;
RELZTZB.Sprache = ' de'; 'us' ; 'us' ; 'de' ; 'us' ; 'de'; 'de'; 'us';
RELZTLB.Sprache = 'de' ; 'us' ; 'us' ; 'us' ; 'de' ; 'de'; 'us' ; 'de'; .... müßten alle sein oder ... ( eine Abfrage ist immer eine vertikale Spalte)​

wie krieg ich das mit eine meine Unterabfrage rein ?

geht das überhaupt irgendwie ?

grüße john
 
Werbung:
*Bahnhof*

Das einzige was ich verstehe ist das in er Spalte RELZTSPE.Sprache ein Wert steht. Besteht dieser Wert jetzt aus einer Liste von Werten? Wie sollen diese Werte weiter verwendet werden und warum sind sie nicht normalisiert?
 
Hallo ukulele

Nein es gibt immer einen Wert von 3 Spalten in einem Datensatz und der kann immer unterschiedlich sein.

RELZTSPE.Sprache
RELZTZB.Sprache
RELZTLB.Sprache

Hier mal kurz ein Bild in Excel da sieht man es denke ich ganz gut.

excel-lang.png

Normalisierung... denke du meinst warum das nicht einheitlich ist, tja was soll ich sagen es wurde von unserem Verkauf nie drauf geachtet und irgendwann fliegts einem um die Ohren.

Hoffe das ich es jetzt besser beschrieben habe

grüße john
 
Okay immerhin nur ein Wert je Spalte in drei Spalten. Es gibt also 8 Kombinationen, die kannst du natürlich auch alle einzeln per IF abfragen. Aber was genau willst du prüfen?
 
Hallo Ukulele

eigentlich alle 8 Zustände reihenfolgenmäßig nach einem Schlüssel ( also in etwas if de,de,de, than go to next, else if us,us,us than go to next else usw... )
also man muss eigentlich schauen das die Zustände der Reihe nach abarbeitet.

Aber... ich habe jetzt mal mit einem Kollegen nochmal gesprochen evtl. schaffen wir es die M.A zu verdonnern die Datensätze anzupassen das wir nur eine Normlisierung erreichen.... ich melde mich wieder wenn ich weiss ob das machbar ist vom Zeitaufwand etc...

grüße john
 
Werbung:
Ansonsten sehe ich auch nur die Möglichkeit mit einer CASE-Schleife alle Zustände zu durchlaufen, so wild ist die Syntax ja nicht. (CASE WHEN spalte1 = x AND spalte2 = x AND spalte3 = x THEN...
 
Zurück
Oben