Jointure entre deux tables

Résolu
manbiz Messages postés 13 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 31 octobre 2016 - Modifié par manbiz le 27/10/2016 à 16:56
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 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

1 réponse

nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
31 oct. 2016 à 15:02
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
1
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
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
0
manbiz Messages postés 13 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 31 octobre 2016
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'.'
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
31 oct. 2016 à 15:21
oui le limit est en mySQL uniquement
0
Rejoignez-nous