IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

grouper par une partie d'attribut


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 66
    Points : 56
    Points
    56
    Par défaut grouper par une partie d'attribut
    Bonjour,
    Je souhaite créer une requete permettant de grouper par les 6 premier chiffre d'un code qui en comporte 8.

    Merci d'avance

    Vplf

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    Et pour quoi pas code avec les 8 chiffres et tu les ordonne par ordre croissant.

  3. #3
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Salut,

    rien ne t'empeche de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT tes_cols
    FROM ta_table
    WHERE conditions
    GROUP BY substr(ton_code,1,6)

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 66
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Shaud7
    Et pour quoi pas code avec les 8 chiffres et tu les ordonne par ordre croissant.
    Je n'ai pas bien compris ta solution. (peut etre que je ne suis pas claire)
    Par exemple: le code principal est la classe des eleves d'un college et le sous-code est la section (exemple avec 4 chiffres)
    0503->cet eleve est en cinquieme 3.
    Est je voudrais compter le nombre d'eleve par section.
    resultat:
    x eleves en 6eme
    y eleves en 5eme
    w eleves en 4eme
    z eleves en 3eme

    vplf

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par nantais
    Salut,

    rien ne t'empeche de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT tes_cols
    FROM ta_table
    WHERE conditions
    GROUP BY substr(ton_code,1,6)
    nantais, la fonction substr() permet de faire quoi au juste?

    Merci

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 66
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Shaud7
    nantais, la fonction substr() permet de faire quoi au juste?

    Merci
    Cette fonction permet d'extraire une sous chaine de ta chaine ici 6 caracteres en commencant au premier.

    C'est bein ce qui est indiqué dans le tutoriel mais ce ne fonctionne que sous Oracle et je suis sous access

    vplf

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par vplf
    Par exemple: le code principal est la classe des eleves d'un college et le sous-code est la section (exemple avec 4 chiffres)
    0503->cet eleve est en cinquieme 3.
    Est je voudrais compter le nombre d'eleve par section.
    resultat:
    x eleves en 6eme
    y eleves en 5eme
    w eleves en 4eme
    z eleves en 3eme

    vplf
    La c'est plus claire, et je comprend pourquoi.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 66
    Points : 56
    Points
    56
    Par défaut
    moui moui moui mais je ne vois pas du tout commetn faire

    vplf

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    Va voir cette page, peut etre trouvera tu ton bonheur

    http://dev.mysql.com/doc/mysql/fr/BLOB.html

  10. #10
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    OK alors sous Access tu peux utiliser à la place de SUBSTR la fonction LEFT (ta_var,6) qui te donne les 6 premiers caractères de ta variable.

    Sinon, l'idée générale reste la même

  11. #11
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Pour reprendre ta demande en particulier, tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT LEFT(code,2), count(*)
    FROM ta_table
    GROUP BY LEFT(coce,2)

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 66
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par nantais
    OK alors sous Access tu peux utiliser à la place de SUBSTR la fonction LEFT (ta_var,6) qui te donne les 6 premiers caractères de ta variable.

    Sinon, l'idée générale reste la même
    Left marche avec une variable ca d'accord mais pas avec un nom de champ il me semble.

    Je ne peux pas faire SQL=SQL & "LEFT(nom_du_champ_de_la_table,6)"
    vplf

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 66
    Points : 56
    Points
    56
    Par défaut
    Alors d'apres vous ca marche meme si c'est dans la chaine SQL!!!!

    c'est louche : chez moi ca en marche pas......

    vplf

  14. #14
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    Pour aller plus vite, donne nous le shéma de ta table et ce que tu souhaites obtenir exactement

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 66
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par nantais
    Pour aller plus vite, donne nous le shéma de ta table et ce que tu souhaites obtenir exactement
    a partir de mon exemple (car ma requete est beaucoup trop compliquee->ca va vous deseperer et vous faire fuire )
    code-----nb eleves
    0601------10
    0602------15
    0603------12
    0501------11
    0502------12
    0503------10

    Je voudrais grouper sur les deux premiers chiffres du code
    resultat souhaité:
    06-----37
    05-----33

    Est ce que ca vous parait plus clair?

    Merci beaucoup


    vplf

  16. #16
    Membre habitué Avatar de nantais
    Inscrit en
    Juillet 2004
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 158
    Points : 192
    Points
    192
    Par défaut
    OK alors cette requete fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT LEFT(code,2), sum(nb_eleves)
    FROM ta_table
    GROUP BY LEFT(code,2)

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    Nb eleves et Code sont dans la meme table?

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 66
    Points : 56
    Points
    56
    Par défaut
    Merci beaucoup.

    Dans l'exemple oui c'est dans la meme table mais ma vraie requete est une requete croisée créée dynamiquement avec une vingtaine de conditions (elle est la base d'un graphique access)

    vplf

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 66
    Points : 56
    Points
    56
    Par défaut
    Ca ne vous parait pas louche comme code?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TRANSFORM COUNT(*) as total 
    SELECT  Left$(UO_CODE, 6) 
    FROM UO U, AGENT A, ENTRETIEN E 
    WHERE U.UO_CODE = A.UO_CODE AND A.AGT_NNI = E.AGT_NNI AND ENT_DATE>AGT_DATE_EMPL  AND ( A.UO_CODE LIKE '019510??' OR  A.UO_CODE LIKE '019515??' ) AND ( AGT_SEXE = '1' OR  AGT_SEXE = '2' ) 
    GROUP BY  Left$(U.UO_CODE, 6) A.AGT_SEXE  
    PIVOT  AGT_SEXE
    vplf

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 66
    Points : 56
    Points
    56
    Par défaut
    C'est bon j'ai trouvé une autre solution.
    Beaucoup plus compliquée mais qui marche.

    Merci beaucoup de votre patience.

    vplf

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Trier par une partie du champ
    Par vivi21 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/05/2011, 20h48
  2. Réponses: 3
    Dernier message: 08/04/2010, 20h05
  3. Grouper sur une partie d'une chaine de caractère
    Par radzar dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/05/2008, 12h14
  4. Espace occupé par une partie d'une table
    Par besco dans le forum Administration
    Réponses: 1
    Dernier message: 24/10/2007, 16h00
  5. Recherche par une partie du champ
    Par safadev dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/10/2005, 14h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo