|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Inscription : mai 2010 Messages : 4 ![]() |
Bonjour,
Soit les tables : Code :
Code :
Code :
Vous remerciant par avance de votre aide et j'utilise ORACLE 10G comme SGBD. |
||||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 626 ![]() |
Bonjour,
Quelle est la relation entre vos table T_CLIENT et CRD ? 1-1 ? Si ca n'est pas le cas que voulez-vous afficher comme date dans le cas où il y a n résultat pour un même clients ? Sinon, plus simplement regardez du côté du "LEFT OUTER JOIN" ca devrait résoudre votre problème d'union. |
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : mai 2010 Messages : 4 ![]() |
Bonjour,
Tout d'abord merci de votre réponse. Au sujet de votre question un client n'a en théorie qu'une seule carte mais en pratique il peut en avoir plusieurs. Tout comme il peut y avoir plusieurs VPC pour une seule carte (une VPC est une télévente qui permet de mettre la carte à jour au moment de sa validation). Ensuite, il s'agissait bien de LEFT OUTER JOIN pour résoudre mon problème. Ca m'a d'ailleurs permis de comprendre le fonctionnement des jointures externes. Voici la requête complète (pour le topic j'avais légèrement simplifié les tables) : Code :
|
||
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 626 ![]() |
Bonjour,
Au lieu de ce "case" horrible, ne pouvez vous pas faire une table de description de ces codes ? Ca vous permettrai de faire une jointure (inner ou outer) afin de retirer les bons libellés directement (et ré-utilisable qui plus est) Sinon pour la demande, les fonctions de fenêtrage permettent de faire ceci assez facilement (partion by) : http://sqlpro.developpez.com/article...clause-window/ Mais pour cela il va d'abord falloir déterminer le point suivant : Comment reconnait-on la dernière vpc ? Je ne vois pas de date dans votre table vpc. edit: hmm pardon, j'ai mal lu la fin je vous propose une solution plus tard si quelqu'un ne l'aura pas déjà fait. |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : mai 2010 Messages : 4 ![]() |
Je ne fais malheureusement qu'exploiter cette base de données... Impossible donc de créer une table.
La dernière VPC est déterminée par le champs VPC_DATE_VENTE de la table T_VPC. Merci pour le lien il va me falloir du temps pour absorber son contenu mais ca a l'air très intéressant. |
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 626 ![]() |
un autre problème se profile : le cas où il y ait 2 vpc pour une même date si votre champ VPC_DATE_VENTE est de type date et non timestamp.
Là il faudra que vous adaptiez la requête selon d'autres critères. Ensuite je ne sais pas si vous ne voulez prendre en compte que les vpc inférieures à la date testée pour les cartes ou non (à adapter aussi). Bref, un exemple un peu plus illustré : Code :
Vous pouvez changer la clause "row_number() over(partition by a.vpc_id order by b.VPC_DATE_VENTE desc)" par "rank() over(..." ou "dense_rank() over(..." (regardez le lien donné plus haut). |
||
|
|
10
|
|
|
#7 |
|
Invité de passage
![]() Inscription : mai 2010 Messages : 4 ![]() |
Je n'y avais pas pensé mais il est en effet possible qu'il y ait 2 VPC le même jour. Je vais donc comme vous me le conseillez adapter la requête avec un autre critère, à priori l'id de la VPC.
Mon problème est résolu, un grand merci encore pour votre aide et vos conseils. |
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 626 ![]() |
euh, j'ai fait une boulette, dans la requête sous le with c'est plutôt comme ça en fait :
Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com