Deux tables : Alpha et Beta
Alpha, a quatre colonnes :
Code - ValeurA - ValeurB - ValeurC
x - 2 - 3 - 0
y - 1 - 3 - 2
Beta , a deux colonnes :
Code - Libelle
x - A
x - B
y - A
y - C
Ce que je veux est assez compliqué à décrire, donc voici directement des exemples :
En entrée j'ai : "x"
1 - je récupère les valeurs possibles pour x dans la table Beta
--> on doit me retourner A et B via la table Beta
2 - à partir de la table alpha je récupère la valeur minimum pour "x" parmi les colonnes A et B
--> on doit me retourner 2
En entrée j'ai : "y"
1 - je récupère les valeurs possibles pour y dans la table Beta
--> on doit me retourner A et C via la table Beta
2 - à partir de la table alpha je récupère la valeur minimum pour "y" parmi les colonnes A et C
--> on doit me retourner 1
Et je veux réaliser cela via, si possible, une seule requête SQL.
Pour infos je suis sur du Oracle.
Voilà ce que j'ai essayé, mais je ne trouve pas le bon résultat :
Le problème de cette requête réside dans le fait qu'un least avec une valeur null renvoie null.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 select least( (select case when exists(select be.code from dual where be.libelle = 'A' and be.code=al.code) then al.valeurA else 0 end from beta b, alpha al where al.code = be.code and al.code = 'x') , (select case when exists(select be.code from dual where be.libelle = 'B' and be.code=al.code) then al.valeurB else 0 end from beta b, alpha al where al.code = be.code and al.code = 'x') , (select case when exists(select be.code from dual where be.libelle = 'C' and be.code=al.code) then al.valeurC else 0 end from beta b, alpha al where al.code = be.code and al.code = 'x') ) from dual
Merci de votre aide
Partager