manbiz
Messages postés13Date d'inscriptionmardi 6 avril 2010StatutMembreDernière intervention31 octobre 2016
-
Modifié par manbiz le 27/10/2016 à 16:56
nagaD.scar
Messages postés4280Date d'inscriptionsamedi 8 septembre 2007StatutMembreDerniè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)
nagaD.scar
Messages postés4280Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202316 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
nagaD.scar
Messages postés4280Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202316 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
Messages postés13Date d'inscriptionmardi 6 avril 2010StatutMembreDernière intervention31 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'.'
nagaD.scar
Messages postés4280Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 4 janvier 202316 31 oct. 2016 à 15:21
31 oct. 2016 à 15:05
Mais il faudra d abord que la requete soit jouée, et donc faire:
31 oct. 2016 à 15:09
j'ai trouvé la solution
pour Limit 1; j'ai toujours un message d'erreur 'Syntaxe incorrecte vers 'limit'.'
31 oct. 2016 à 15:21