Jointure entre deux tables [Résolu]

manbiz 13 Messages postés mardi 6 avril 2010Date d'inscription 31 octobre 2016 Dernière intervention - 27 oct. 2016 à 16:55 - Dernière réponse : nagaD.scar 4175 Messages postés samedi 8 septembre 2007Date d'inscription 5 janvier 2018 Dernière intervention
- 31 oct. 2016 à 15:21
Bonjour à tous,
je vais commencer par vous présenter mes deux tables

Crédit
Cod_Client
Montant

ID_Client
Cod_Client
ID
Type_ID
-On a trois types ID
1- Carte identité
2- Passeport
3- Carte séjour

Donc un client peut avoir plus q'une ID dans la table 'ID_Client' mais un seul COD_Client qui est le clé primaire dans la table 'Crédit'.

J'ai crée une vue dont la requête est la suivante:
SELECT
DISTINCT (CASE WHEN (i.Type_ID =1) THEN 'Carte identité'
WHEN (i.Type_ID =2) THEN 'Passeport'
WHEN (i.Type_ID =3) THEN 'Carte séjour'
END ) as [TYPDOC], i.ID as NumID, C.Cod_Client, C.Montant From Credit as C LEFT OUTER JOIN ID_Client i on C.Cod_Client=i.Cod_Client

Mon problème c'est que si le client a plusieurs ID je veut seulement afficher la ligne qui possède l'ID la plus important (1 Plus important que 2 plus important que 3)

ET MERCI D'AVANCE
Afficher la suite 

4 réponses

Répondre au sujet
nagaD.scar 4175 Messages postés samedi 8 septembre 2007Date d'inscription 5 janvier 2018 Dernière intervention - 31 oct. 2016 à 15:02
+1
Utile
3
salut,

Tu peux simplement rajouter:

 
ORDER BY C.ID
limit 1


Ca triera les résultats en fonction de l id, du plus petit au plus grand, et ne récupèrera que la première entrée.

naga
Cette réponse vous a-t-elle aidé ?  
nagaD.scar 4175 Messages postés samedi 8 septembre 2007Date d'inscription 5 janvier 2018 Dernière intervention - 31 oct. 2016 à 15:05
Ca c 'est en mySQL, en sql la limit sera :


AND rownum=1


Mais il faudra d abord que la requete soit jouée, et donc faire:


SELECT * FROM (
SELECT
DISTINCT (CASE WHEN (i.Type_ID =1) THEN 'Carte identité'
WHEN (i.Type_ID =2) THEN 'Passeport'
WHEN (i.Type_ID =3) THEN 'Carte séjour'
END ) as [TYPDOC], i.ID as NumID, C.Cod_Client, C.Montant From Credit as C LEFT OUTER JOIN ID_Client i on C.Cod_Client=i.Cod_Client ) REQ
WHERE ROWNUM=1
manbiz 13 Messages postés mardi 6 avril 2010Date d'inscription 31 octobre 2016 Dernière intervention - 31 oct. 2016 à 15:09
Merci pour ta réponse
j'ai trouvé la solution
 WITH T AS 
(
SELECT CASE WHEN i.Type_ID =1 THEN 'Carte identité' 
            WHEN i.Type_ID =2 THEN 'Passeport'
		      WHEN i.Type_ID =3 THEN 'Carte séjour' END as TYPDOC,
       i.ID as NumID, C.Cod_Client, C.Montant,
       ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Type_ID) AS N 
From   Credit as C 
       LEFT OUTER JOIN ID_Client i on C.Cod_Client=i.Cod_Client
) 
SELECT * FROM T WHERE N = 1; 


pour Limit 1; j'ai toujours un message d'erreur 'Syntaxe incorrecte vers 'limit'.'
nagaD.scar 4175 Messages postés samedi 8 septembre 2007Date d'inscription 5 janvier 2018 Dernière intervention - 31 oct. 2016 à 15:21
oui le limit est en mySQL uniquement
Commenter la réponse de nagaD.scar

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.