Jointure entre deux tables [Résolu]

Signaler
Messages postés
13
Date d'inscription
mardi 6 avril 2010
Statut
Membre
Dernière intervention
31 octobre 2016
-
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
-
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

Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
16
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
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
16
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
Messages postés
13
Date d'inscription
mardi 6 avril 2010
Statut
Membre
Dernière intervention
31 octobre 2016

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'.'
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
16
oui le limit est en mySQL uniquement