Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1331 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Groupé par les 3 première lettre, sql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Groupé par les 3 première lettre, sql

n°1881100
sinifer
Posté le 05-05-2009 à 15:55:38  profilanswer
 

Bonjour,
 
j'ai un petit problème dans ma requete actuel je prend tous les customers_from qui commence par 1st et les regroupes mais mon problème c'est que je veu fair la même chose mais sur tous le champs customers_from
 
car par exemple j'ai dans mon champs les noms suivants :
 
1st_qwe, 1st_asd, 1st_ghj, 1st_poi, add_qwe, add_rtz, add_lkj, add_puz, poi_ghj, poi_gjhgj, poi_tgb etc...
 
donc j'aimerai prendre les trois preière lettre et fair ma condition comme celle là  

Code :
  1. SELECT IF(customers_from LIKE '1st%','1rst',customers_from) AS Origin,
  2.                               COUNT(cu.customers_id) AS effectif_vg
  3.                                FROM en_customers cu inner join en_commandes co on cu.customers_id=co.customers_id
  4.                                WHERE customers_gratuite='1'
  5.                                GROUP BY Origin "


 
 
Merci a toute personne qui peu m'éclaircir

mood
Publicité
Posté le 05-05-2009 à 15:55:38  profilanswer
 

n°1881115
sinifer
Posté le 05-05-2009 à 16:26:43  profilanswer
 

y-a-t-il une solution a mon problème???

n°1881116
Tibar
Posté le 05-05-2009 à 16:26:48  profilanswer
 

Bonjour,
 
Si tu fais une requête dans ce genre :  
 
SELECT  
LEFT(CU.customers_from, 3) AS Origin,
COUNT(CU.customers_id) AS Effectif_Vg
FROM EN_CUSTOMER CU
INNER JOIN EN_COMMANDES CO ON CU.customers_id = CO.customers_id
WHERE ***CO ou CU ??? *** .customers_gratuite = '1'
GROUP BY LEFT(CU.customers_from, 3)
 
Ca doit fonctionner non ?
 
Par contre, je ne sais pas ce que ça fait si tu as des customers_from qui ont une longueur < 3, sur MySQL, ça regroupe quand même...
 
Bon courage,
 
EDIT : 5 secondes trop tard apparemment...


Message édité par Tibar le 05-05-2009 à 16:28:16
n°1881117
olivthill
Posté le 05-05-2009 à 16:27:13  profilanswer
 

Avec Oracle, et certains autres SGBD, on peut utiliser substr(champ, indice_de_depart_commencant_a_1, longueur), ce qui donne :

Code :
  1. SELECT substr(customers_from, 1, 3) AS Origin,
  2.                               COUNT(cu.customers_id) AS effectif_vg
  3.          FROM en_customers cu inner join en_commandes co on cu.customers_id=co.customers_id
  4.         WHERE customers_gratuite='1'
  5.          GROUP BY Origin "


Edit : Ou avec left, qui est aussi bien. J'ai répondu sans voir le message d'avant.


Message édité par olivthill le 05-05-2009 à 16:36:37
n°1881119
Tibar
Posté le 05-05-2009 à 16:34:17  profilanswer
 

Ok, le SUBSTR semble un peu plus générique, je suis habitué à LEFT ou RIGHT, sous MySQL, on peut faire les 2 avec le même résultat...

n°1881122
sinifer
Posté le 05-05-2009 à 16:37:15  profilanswer
 

ok merci j'esseil de suite

n°1881131
sinifer
Posté le 05-05-2009 à 16:48:58  profilanswer
 

Merci sa marche niquel mais mon seul petit problème c'est que j'aurai voulut voir la suite des origine (ceu qui ne sont pas touché par le regroupement) mais je crois que c'est impossible.
 
En tous cas un grand merci

n°1881133
Tibar
Posté le 05-05-2009 à 16:50:14  profilanswer
 

Ca veut dire quoi "la suite des origines" ? Tu voudrais afficher le libellé complet de l'origine ?

n°1881135
sinifer
Posté le 05-05-2009 à 16:54:09  profilanswer
 

oui je voudrai affiché le libellé complet d'origine pour ceux qui sont qu'une fois ex: 1st_zui, 1st_oiuou, ouiou, 2st_oiiu, 2st_dfgh
 
je veu regroupé 1st et 2st mai je veu gardé complet ouiou
 
si c'est pas possible je laisse tombé

n°1881259
sinifer
Posté le 06-05-2009 à 08:18:38  profilanswer
 

mais es-ce possible????

mood
Publicité
Posté le 06-05-2009 à 08:18:38  profilanswer
 

n°1881372
Tibar
Posté le 06-05-2009 à 11:38:03  profilanswer
 

Salut,
 
Ca doit être possible, en faisant de cette manière par exemple, ça te donne quoi :  
 
SELECT LEFT( CU.customers_from, 3 ) AS Origin, COUNT( CU.customers_id ) AS Effectif_Vg
FROM EN_CUSTOMER CU
INNER JOIN EN_COMMANDES CO ON CU.customers_id = CO.customers_id  
WHERE ***CO ou CU ??? *** .customers_gratuite = '1'  
GROUP BY LEFT(CU.customers_from, 3)
HAVING COUNT( CU.customers_id ) > 1
UNION
SELECT CU1.customers_from AS Origin, COUNT( CU1.customers_id ) AS Effectif_Vg
FROM EN_CUSTOMER CU1
INNER JOIN JOIN EN_COMMANDES CO ON CU1.customers_id = CO.customers_id
WHERE ***CO ou CU ??? *** .customers_gratuite = '1'
GROUP BY LEFT( CU1.customers_from, 3 )
HAVING COUNT( CU1.customers_id ) = 1  
 
Par contre, c'est à tester, je n'ai pas regardé si tous les cas fonctionnaient... Dans la base que j'ai utilisée pour faire les tests, ça semble bien se passer...
 
Bon courage,


Message édité par Tibar le 06-05-2009 à 11:39:05
n°1881419
sinifer
Posté le 06-05-2009 à 14:33:16  profilanswer
 

ok merci c'est parfait


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Groupé par les 3 première lettre, sql

 

Sujets relatifs
première et dernière IP d'un réseau (php)Remplacer une lettre wchar_t par une autre dans un fichier. (Unicode)
Trouver la première plus longue monotonie[vbs] ajout d'un utilisateur AD dans un groupe
[Résolu]Récupérer le groupe de travail en VBSCréer un nouveau groupe ActiveDirectory
Etudiante en lettre recherche aide pour devoir !!2eme éditionEtudiante en lettre recherche aide pour devoir !!
Premiere image d'un lecteur flash en demi-teintQuelle solution pour une première base SQL ?
Plus de sujets relatifs à : Groupé par les 3 première lettre, sql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR