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

Access Discussion :

regroupement de valeurs sur un champs


Sujet :

Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 208
    Points : 76
    Points
    76
    Par défaut regroupement de valeurs sur un champs
    Bonsoir,

    J'ai une relation 1-n entre la valeur A et les valeurs a...z
    Comment puis je créer sur une requête regroupée sur A un champs regroupant les valeurs 1...n
    Genre : Champs1 = A ; Champs2 = "a"+"b"+"c"+..."z"

    Merci pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    J'ai une relation 1-n entre la valeur A et les valeurs a...z


    Je pense qu'il y a confusion.

    Une relation 1 à N signifie que dans une table tu as un champ qui est une clé primaire, et que dans une seconde table, tu as un champ qui reprend la clé primaire de la première table, que l'on peut retrouver plusieurs fois et qui est utilisé pour la relation.

    De ce fait là, le reste devient un peu obscur.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 208
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par Heureux-oli


    Je pense qu'il y a confusion.

    Une relation 1 à N signifie que dans une table tu as un champ qui est une clé primaire, et que dans une seconde table, tu as un champ qui reprend la clé primaire de la première table, que l'on peut retrouver plusieurs fois et qui est utilisé pour la relation.

    De ce fait là, le reste devient un peu obscur.
    C'est exactement ça !!
    Pour être plus clair j'aimerais qu'un champs regroupe toute les valeurs rattachées à ma clef primaire
    Une requête simple donnerait

    Champs1---Champs2
    A ----------a
    A ----------b
    A ----------c
    A ----------...


    Et j'aimerais avoir :

    Champs1----Champs2
    A-----------a + b + c + ...


    Merci pour ton aide

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 366
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 366
    Points : 20 402
    Points
    20 402
    Par défaut
    Essayer
    SELECT SUM(table1.champs1) from table1 where table1.champs1=table2.champs2

    En tout cas il doit y avoir SUM dans la clause SQL
    Au besoin utiliser INNER JOIN..ON

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 208
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par Mat.M
    Essayer
    SELECT SUM(table1.champs1) from table1 where table1.champs1=table2.champs2

    En tout cas il doit y avoir SUM dans la clause SQL
    Au besoin utiliser INNER JOIN..ON
    Seulement j'aimerais que les valeurs ne soient pas sommées, remplacer le "+" par un ";"
    Ce qui donnerait :

    Champs1----Champs2
    A-----------a ; b ; c ; ...

    Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Citation Envoyé par Mat.M
    Essayer
    SELECT SUM(table1.champs1) from table1 where table1.champs1=table2.champs2

    En tout cas il doit y avoir SUM dans la clause SQL
    Au besoin utiliser INNER JOIN..ON
    Je pense pas que SUM va fonctionner sur du texte.

    Je pense qu'il faut compter le nombre d'occurrence de A et ensuite, concaténer par une boucle les valeur du second champ.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 208
    Points : 76
    Points
    76
    Par défaut
    Je pense pas que SUM va fonctionner sur du texte.

    Je pense qu'il faut compter le nombre d'occurrence de A et ensuite, concaténer par une boucle les valeur du second champ.
    Ok pour compter mais la concaténation me pose problème. Pourrais tu m'indiquer la démérche STP ??

    Merci encore à tous

  8. #8
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr,

    n'oubliez pas les sources!
    http://access.developpez.com/sources...QLLigneColonne

    y a juste à mettre un ";" à la place de l'espace

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 208
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par Arkham46
    bjr,

    n'oubliez pas les sources!
    http://access.developpez.com/sources...QLLigneColonne

    y a juste à mettre un ";" à la place de l'espace
    Salut,

    Merci de m'avoir dirigé vers ce code mais lorsque je l'adapte à ma base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public Function concat_type(Projet As Long) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Selectionne les types de commande
    SQL = "SELECT type FROM cpt_type WHERE id_commande=" & id_commande
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatenation des colisages
    While Not res.EOF
    concat_type = concat_type & res.Fields(0).Value & " "
    res.MoveNext
    Wend
    'Enleve le dernier espace
    concat_type = Left(concat_type, Len(concat_type) - 1)
    'libere la mémoire
    Set res = Nothing
    End Function
    puis requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT cpt_type.id_commande, concat_type(id_commande) AS Colisage
    FROM cpt_type;
    J'ai le message d'erreur suivant :

    Erreur d'execution '3075':

    Erreur de syntaxe (opérateur absent) dans l'expression 'id_commande='.


    Merci pour votre aide et votre patience

  10. #10
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 898
    Points : 4 787
    Points
    4 787
    Par défaut
    Le message indique que id_commande n'est pas (encore) valué
    SQL = "SELECT type FROM cpt_type WHERE id_commande=" & id_commande
    Bonne journée
    "Always look at the bright side of life." Monty Python.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 208
    Points : 76
    Points
    76
    Par défaut
    Et pourtant il l'est bel et bien
    Ci jointe une extraction excel de cpt_type

    Est ce que le fait que cpt_type soit une requête pose problème ??

    Merci à tous
    Fichiers attachés Fichiers attachés

  12. #12
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 898
    Points : 4 787
    Points
    4 787
    Par défaut
    et que dirais -tu de remplacer projet par ... ce qui faut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function concat_type(Projet As Long) As String
    Bonne journée
    "Always look at the bright side of life." Monty Python.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 208
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par micniv
    et que dirais -tu de remplacer projet par ... ce qui faut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function concat_type(Projet As Long) As String
    Bonne journée
    J'ai honte !!
    Modifs ok

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public Function concat_type(id_commande As long) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Selectionne les types de commande
    SQL = "SELECT type FROM cpt_type WHERE id_commande=" & id_commande
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
    concat_type = concat_type & res.Fields(0).Value & " "
    res.MoveNext
    Wend
    'Enleve le dernier espace
    concat_type = Left(concat_type, Len(concat_type) - 1)
    'libere la mémoire
    Set res = Nothing
    End Function
    mais maintenant j'ai

    Erreur d'execution
    Type de données incompatible dans l'expression du critère

    J'ai modifié string par integer et/ou long mais j'avoues ne pas tout comprendre là

    Gracias

  14. #14
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 898
    Points : 4 787
    Points
    4 787
    Par défaut
    entre les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL = "SELECT type FROM cpt_type WHERE id_commande=" & id_commande
    Set res = CurrentDb.OpenRecordset(SQL)
    Insère Tu en consulteras le résultat dans la fenêtre Exécution (du VBA editeur) ca devrait pouvoir t'aider
    "Always look at the bright side of life." Monty Python.

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 208
    Points : 76
    Points
    76
    Par défaut
    No problemo sur le sql
    mais rien à faire au niveau de l'erreur sur la requête...

    Merci en tout cas

  16. #16
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 898
    Points : 4 787
    Points
    4 787
    Par défaut
    mais quand tu passes la requete obtenu dans le debug.print dans l'éditeur de requete (donc par copier/coller du sql dans le QBE ), ça donne quoi ?
    "Always look at the bright side of life." Monty Python.

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 208
    Points : 76
    Points
    76
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT type FROM cpt_type WHERE id_commande=52677
    Autant pour moi voilà ce qui ressort

    Thanx

  18. #18
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 898
    Points : 4 787
    Points
    4 787
    Par défaut
    alors la fenetre de la base, tu vas dans le module des requêtes
    Tu fais Nouveau (pour Création d'une nouvelle requete),
    sur la fenetre qui te propose de choir des tables ou des requetes, tu fais Fermer
    dans le bandeau bleu supérieur de la fenetre, tu cliques droit : tu choisis "mode Sql"
    dans la fentre, tu colles le texte de ta requete ci-dessus, tu sauves et tu joues la requete : elle passe ou elle plante ?
    "Always look at the bright side of life." Monty Python.

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 208
    Points : 76
    Points
    76
    Par défaut
    Ca nous donne un "Type de donnée incompatible dans l'expression du critère" que j'ai corrigé en ajoutant les guillemets de rigueur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT type FROM cpt_type WHERE id_commande="52677"
    Je vois pas ce qui cloche dans le module ...

  20. #20
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Essai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT DISTINCT id_commande, concat_type([id_commande]) AS Colisage
    FROM cpt_type;
    Amicalement

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. regrouper plusieurs valeurs dans un champs
    Par remyc42 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 30/08/2012, 12h01
  2. UPDATE regrouper les valeurs d'un champ
    Par hammag dans le forum SQL
    Réponses: 4
    Dernier message: 31/07/2012, 11h17
  3. [ZF 1.10] Regrouper les données sur un champ
    Par tux59 dans le forum Zend_Db
    Réponses: 0
    Dernier message: 10/02/2012, 09h20
  4. inverser deux valeur sur un champ UNIQUE
    Par gotcha5832 dans le forum Requêtes
    Réponses: 3
    Dernier message: 23/05/2011, 04h23
  5. Regrouper des valeurs de différents champs
    Par Guranga dans le forum Access
    Réponses: 1
    Dernier message: 13/06/2006, 21h54

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