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:
Da dieser Code sich doch relativ and diesem Problem orientiert, habe ich den mal probiert in diesen zu integrieren.
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' ;
wie krieg ich das mit eine meine Unterabfrage rein ?
geht das überhaupt irgendwie ?
grüße john
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)
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