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 :

regrouper plusieurs champ dans un seul en requete


Sujet :

Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut regrouper plusieurs champ dans un seul en requete
    Bonjour,

    j'ai 4 champs

    c1 ___________c2 _____ c3 _______c4

    8006_________401_____ 402_______403

    et j'aimerais avoir

    c1______c2,c3,c4
    8006 _____401
    8006 _____402
    8006 _____403

    comment puis mis prendre , j'ai chercher sans resultat et je n'ai pas trouvé de post à ce sujet.
    ce ne doit pas êttre dur sauf pour moi lol

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (SELECT C2 FROM MaTable) UNION (SELECT C3 FROM MaTable) UNION (SELECT C4 FROM MaTable)

  3. #3
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Salut,

    Tu peux essayer une requete UNION comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Select Nump, Num1 as numx From Num where num1<>0 Union Select Nump,num2  From Num where num2<>0
    UNION select Nump,num3   from Num where num3<>0;
    Ainsi les num1 2 et 3 se retrouve dans le champ unique Numx.
    Le Where sur chaque Select permet d'éviter les valeurs vides.

    Salut,

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut
    Salut merci beaucoup cela correspond bien ,mais pourquoi acces me demande d'entrer à chaque fois les numéro de la requete ?

    je voudrai qu'il m'affiche le résulat requete sous forme de tableau sans saisies de données

    car la il me demande d'entrer par boite de dialogue c1,c2,c3,c4.

    alors que je souhaite une requete récapitulative ?

    J'eesiae de mettre cela ne marche pas.

    je dosi toujours saisir les valeurs , cla fait comme une requete de recherche précise , alors que je voudrais , regroupement total des 3 champs dans un:

    Nump____numx
    8006____401
    8006------402
    8006------403
    8010------420
    8010------421
    7502------430
    7502------431

    il manque un petit truc là je rame .... lol je bloque

    Merci pour vos réponses !!

  5. #5
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Re,

    Je comprend plus très bien, tes champs ces C1,c2 c3 ou Num1, num2 et num3 ?
    Et tu as essayé la requête de Tofalu ou la mienne ?

    Salut,

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut
    oui j'ai essayer les deux,

    et dans les les deux cas j'ai une boite de dialogue me demandant d'entrer les valeurs nump , num1,num2,num3

    ( qui vaut respectivement c1,c2,c3,c4) , vous avez choisi des indices différente pour dire la même chose je crois.

    j'essaie de mettre ma requete en tableau et nom pas vaec les boites de dialogue.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut
    ok j'ai compris ce qu'il se passe , j'ai refait une base , en fait c'est parce que les nombres sont stocké sous forme de texte que cela ne fonctionne pas

    quand je met coome proiété du champ : numérique ca marche.

    Je ne suis pasur de pouvoir modifier cela , car la table source vient d'un pocket pc je vais voir sir cela ne pose pas des problèmes aced la synchronisation entre la bdd du pocket et mon pc.

  8. #8
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    Salut,

    je me demande s'il n'y a pas un problème de structure de la base de donnée. Il me semble bien que les champs c2,c3,c4 devrait figuré dans une table liée au champs c1.

    Il faudrait peut être prendre le taureau par les cornes et crée une table T_C1 à l'aide d'une requête et ensuite de lier ta table actuelle avec cette T_C1 sur le champs C1.

    bonne chance

  9. #9
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    j'ai répondu trop vite,
    il faut créer une table T_C1 comme je l'ai dit mais ensuite il sera nécessaire de créer une table avec les valeurs des 2 champs soit c1 et un champs qui contient les c2,c3,c4 pour cela rien de tel que 3 requêtes ajout
    Ensuite tu peux lier les tables et tu aura ce que tu veux

    Avec Vba il est possible de tout automatiser

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    voici un code qui va te permettre de faire ca
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    Sub anadecroise(source As String, cible As String, nbfix As Integer)
    'cette procèdure crée une table cible
    'à partir de la table source
    ' elle fait le travail inverse d'une requête analyse croisée
    'les  premières colonnes spécifiées par nbfix restent inchangées
    'la colonne (ipivot) suivante reprendra les intitulés des
    ' colonnes supérieures à nbfix
    'la colonne suivante (dpivot) contient les valeurs transposées
    Dim base As DAO.Database
    Dim champ As DAO.Field
    Dim depart As DAO.Recordset
    Dim departdef As DAO.Fields
    Dim boucle As Integer
    Dim typechamp As Integer
    Dim incohérent As Boolean
    Dim sql As String
    Dim sqlb As String
    If source = cible Then Exit Sub
    Set base = CurrentDb()
    'ici la procédure s'arrête si la table source n'existe pas
    Set depart = base.OpenRecordset(source)
    Set departdef = base.TableDefs(source).Fields
    'vérification du nombre de champ à transposer
    If nbfix + 2 > departdef.Count Then
    MsgBox "il doit y avoir au moins deux champs à transposer", vbCritical, "ERREUR"
    Exit Sub
    End If
    'vérification du type des champs de source
    typechamp = departdef(nbfix).Type
    incohérent = False
    For boucle = nbfix + 1 To departdef.Count - 1
    Set champ = departdef(boucle)
    If champ.Type <> typechamp Then incohérent = True
    Next boucle
    If incohérent Then
    MsgBox "tous les champs transposés doivent avoir le même type", vbCritical, "ERREUR"
    Exit Sub
    End If
    'création de la table cible et ajout de la première colonne à transposer
    sql = "SELECT "
    For boucle = 0 To nbfix - 1
    sql = sql & departdef(boucle).Name & ","
    Next boucle
    sql = sql & "'" & departdef(nbfix).Name & "' as ipivot"
    sql = sql & ", " & departdef(nbfix).Name & " as dpivot into " & cible & " from " & source & ";"
    DoCmd.RunSQL (sql)
    sql = "INSERT INTO " & cible & "("
    For boucle = 0 To nbfix - 1
    sql = sql & departdef(boucle).Name & ","
    Next boucle
    sql = sql & "ipivot,dpivot ) select "
    For boucle = 0 To nbfix - 1
    sql = sql & departdef(boucle).Name & ","
    Next boucle
    DoCmd.SetWarnings False
    'ajout des données suivantes
    For boucle = nbfix + 1 To departdef.Count - 1
    sqlb = sql & "'" & departdef(boucle).Name & "' as ipivot," & departdef(boucle).Name & " as dpivot from " & source & ";"
    DoCmd.RunSQL (sqlb)
    Next boucle
    DoCmd.SetWarnings True
    End Sub
    pour l'utiliser tu commandes anadecroise("matable","ntable",1) et tu regardes ntable
    Elle est pas belle la vie ?

  11. #11
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Moi, je crois surtout qu'il y a un problème de comprehension ... soit les champs s'appelle Cquelquechose ... soit numQuelquechose...

    Enfin, le type du champ n'a rien à voir sur la requête (sauf peut être s'il s'agit d'un type mémo)

    Donc il serait interressant dans un premier temps de connaitre réellement le nom des champs et de la table

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut
    Bien me revoilà tachons d'être clair ;

    tous d'abord le code de Trini marche très bien celui de Tofalu je n'endoute pas , mais j'ai pas tester.

    Donc : toutes les données ce trouve dans une table et une seul , on va la nommé :table1.

    Dans cette table se trouve 4 champs : un champ principal( nommé ChampP) qui correspond a celui de la clé primaire et 3 autres champ ( champ1,champ2,champ3)

    donc le but était de se rerouver avec une requete avec 2 champ , l'un étant le champ P et l'autre étant une union des champ1,champ2,champ3, nommé champx.

    je pense que c'est clair , voir les exemples plus haut.

    le code utilisé étant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Select ChampP, champ1 as champx From Table1 where champ1<>0 Union Select ChampP,champ2 From Table1 where champ2<>0 
    UNION select ChampP,champ3   from Table1 where champ3<>0;
    je confirme que c'est bien le type de champ qui posait problème , le type texte ne marche pas mais avec le type numérique c'est bon. ( après peut-^tre qu'il y a autre chose qui rentre en compte mais j'ai testé sur une base simple avec 1 table)

    je panse qu'avec la requete de tofalu, il ne doit pas y avoir d'importance , a vérifier.

    quand au problème de comphrénsion, trini avait renommé c1 en num et ainsi de suite , j'ai continuer dans ce sens d'ou la confusion.

    Je teste la requete de tofalu et je reviens.

    random je vais examiner ce code merci

    A bientôt et merci encore ,

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 196
    Points : 102
    Points
    102
    Par défaut
    la requete de tofalu marche bien , mais elle est incomplète elle affiche seulement un seul champs qui represente l'union des 3 cité plus haut. et pas la correspondance avec le champP cité dans plus haut.

    et le type de données n'à pas d'importance pour la requete.

    je vais essayer de la compléter

    A bientôt

Discussions similaires

  1. Écriture de plusieurs champs dans un seul champ
    Par Ricki boy dans le forum Access
    Réponses: 1
    Dernier message: 16/04/2010, 15h32
  2. [AC-2007] Regrouper plusieurs cellules dans une seule
    Par J_help dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 20/07/2009, 18h47
  3. Réponses: 5
    Dernier message: 02/05/2009, 20h42
  4. Plusieurs champs dans 1 seul champ
    Par lionel256 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 07/04/2008, 10h44
  5. Réponses: 7
    Dernier message: 19/09/2006, 18h02

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