Bonjour à tous,
J'aimerais savoir si ma demande est faisable via une seule requête SQL.
Contexte :
J'ai une table TOTO qui possède 3 champs PRODUIT, CLIENT, PRIX
Pour les champs PRODUIT et CLIENT, il existe une notion de valeur par défaut nommé 'Autres'.
Ce qui fait que la table contient par exemple les enregistrements suivants
PRODUIT CLIENT PRIX PRODUIT1 CLIENT1 10.0 Autres CLIENT1 20.0 PRODUIT1 Autres 30.0 Autres Autres 40.0
Ma demande :
Ramener la ligne correspondant à un PRODUIT et un CLIENT donné
Exemple :
Si je cherche PRODUIT1 et CLIENT1, la requête doit me ramener PRODUIT1, CLIENT1, 10.0
Si je cherche PRODUIT2 et CLIENT1, la requête doit me ramener Autres, CLIENT1, 20.0
Si je cherche PRODUIT1 et CLIENT2, la requête doit me ramener PRODUIT1, Autres, 30.0
Si je cherche PRODUIT2 et CLIENT2, la requête doit me ramener Autres, Autres, 40.0
Aujourd'hui, je teste d'abord si la ligne PRODUIT1 et CLIENT1 existe
Si elle existe, j'arrête
Sinon, je cherche si la ligne Autres et CLIENT1 existe
Si elle existe, j'arrête
Sinon, je cherche si la ligne PRODUIT1 et Autres existe
Si elle existe, j'arrête
Sinon, je cherche si la ligne Autres et Autres existe (Elle existe toujours)
Cela fait pas mal de requête et j'essaie d'optimiser tout ça
Au final, la requête doit me ramener 1 et 1 seule ligne.
J'étais tenté par ça mais ça me ramène 3 lignes (ce qui me paraît assez logique finalement)
Si vous avez une idée, je suis preneur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 select * from TOTO t where PRODUIT = case when exists (select 1 from TOTO t1 where t.PRODUIT = t1.PRODUIT and t.PRODUIT = 'ProduitCherché') then t.PRODUIT else 'Autres' end and CLIENT = case when exists (select 1 from TOTO t2 where t.CLIENT = t2.CLIENT and t.CLIENT = 'ClientCherché') then t.CLIENT else 'Autres' end
Merci
Cordialement,
Maxime
Partager