Groupé par les 3 première lettre, sql - SQL/NoSQL - Programmation
Marsh Posté le 05-05-2009 à 16:26:48
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...
Marsh Posté le 05-05-2009 à 16:27:13
Avec Oracle, et certains autres SGBD, on peut utiliser substr(champ, indice_de_depart_commencant_a_1, longueur), ce qui donne :
Code :
|
Edit : Ou avec left, qui est aussi bien. J'ai répondu sans voir le message d'avant.
Marsh Posté le 05-05-2009 à 16:34:17
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...
Marsh Posté le 05-05-2009 à 16:48:58
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
Marsh Posté le 05-05-2009 à 16:50:14
Ca veut dire quoi "la suite des origines" ? Tu voudrais afficher le libellé complet de l'origine ?
Marsh Posté le 05-05-2009 à 16:54:09
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é
Marsh Posté le 06-05-2009 à 11:38:03
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,
Marsh Posté le 05-05-2009 à 15:55:38
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à
Merci a toute personne qui peu m'éclaircir