|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : décembre 2005 Messages : 41 ![]() |
Bonjour.
Sous Oracle, je dispose de 4 tables : -commande, avec 'id_commande' pour la clé primaire -brulage, avec 'tc_typecontrat', 'id_offre' et 'id_commande' pour les clés primaires -offre, avec 'tc_typecontrat', 'id_offre' et 'id_commande' pour les clés primaires -compte, avec 'id_dossier' pour la clé primaire Je dois écrire une requête qui permette d'identifier, si elle existe, une offre "PRE" active sur le dossier sur lequel la commande a été réalisée, sinon une offre "POST" et compléter par le code du dossier. Dois-je passer par le PL/SQL d'Oracle pour traiter cette condition "Si...Sinon" ? Si oui, pourriez-vous, s'il vous plaît, m'indiquer comment faire ? Séparément chacune de ces conditions se traiterait comme cela : Pour qu'une offre "PRE" soit active sur le dossier d'une commande, il faut que le champ datefin de la table offre ne soit pas nul, ce qui donne la requête : Code :
SELECT offre.id_offre FROM offre, commande WHERE offre.tc_typecontrat = 'PRE' AND offre.datefin IS NOT NULL AND offre.id_dossier = commande.id_dossier |
|
|
00
|
|
|
#2 | ||
|
Membre expérimenté
![]() Nicolas Inscription : janvier 2011 Messages : 378 ![]() |
Je ne pense pas avoir suivi toute la subtilité de ta demande mais voila quelque chose de pas fin : union entre les deux type de résultat possible PRE et POST, un colonne pour les trier (PRE en premier) et je prends la 1er ligne.
Code :
|
||
|
|
00
|
|
|
#3 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
Bonjour,
Je penses qu'avec une fonction de fenêtrage on devrait pouvoir éviter un union. Code :
Si il y a forcément un compte pour une commande, dans ce cas on peut transformer le left outer join en inner join. On pourrai simplifier le système si on a la condition suivante : - 1 seule offre possible par commande Là on pourrait enlever la fonction de fenestrage et n'utiliser que des jointures .. |
||
|
|
00
|
|
|
#4 | ||
|
Invité de passage
![]() Inscription : décembre 2005 Messages : 41 ![]() |
Merci pour vos réponses.
Cela correspond bien. La deuxième requête proposée (WITH tmp AS, etc…) doit s’appuyer sur le résultat d’une autre requête qui est la suivante : Code :
Dois-je utiliser un union ALL comme pour la première requête proposée ? |
||
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 638 ![]() |
bonjour,
non. Code :
|
||
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : décembre 2005 Messages : 41 ![]() |
Merci.
Cela marche bien. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com