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

Requêtes et SQL. Discussion :

Problème sur requètes de mise en colonne de data multis occurence [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème sur requètes de mise en colonne de data multis occurence
    Ref-NPS_____ Marque_______Ref
    D330O01_____A.B.S_______15770
    D330O01_____ A.B.S_______16542
    D330O01_____ACDelco____AC2079D
    D330O02_______AP_______20238E
    D330O01______APEC______DSK221

    pour obtenir
    ______________AP______APEC________ACDelco______A.B.S
    D330O01______________DSK221______AC2079D_____15770
    D330O01_______________________________________16542 "cette deuxieme ligne n'est pas pris en compte"
    D330O02____2038E

    le requètte "TRANSFORM First [MYTABLE.Ref-NPS] AS PREMIER... SELECT ... FROM MYTABLE ... GROUP BY ... ORDER BY.. PIVOT [MYTABLE.Marque]
    NE PREND PAS EN COMPTE LES "Ref-NPS" identique.


    MERCI. d'avance pour votre aide.

    cordialement Jeanmi.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,
    Tu ne peux pas obtenir ce résultat juste avec une requête...En effet, lors d'une requête Analyse croisée, tu es obligé d'utiliser une fonction d'agrégation (Somme, Compte...). La seule solution est de passer par la programmation. Places ce code dans un module et, avec la fonction analyseCroisee(), tu obtiendras le résultat souhaité dans une table (ici "T_result").
    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
    64
    65
    66
    67
    Const tblOrigine As String = "maTable"
    Const tblDestination As String = "T_result"
     
    Public Function analyseCroisee()
        Dim strSQL As String
        Dim rst As DAO.Recordset
     
        creerTableDestination tblOrigine, tblDestination
        strSQL = "SELECT [Ref-NPS], Marque, Ref FROM " & tblOrigine & ";"
     
        Set rst = CurrentDb.OpenRecordset(strSQL)
     
        While Not rst.EOF
            strSQL = "INSERT INTO " & tblDestination & " ([Ref-NPS],[" & Replace(rst(1), ".", "_") & "]) " & _
                     "VALUES ('" & rst(0) & "','" & rst(2) & "');"
            CurrentDb.Execute (strSQL)
            rst.MoveNext
        Wend
     
    End Function
     
    Private Function creerTableDestination(strTableOrigine As String, strTableDestination As String)
        Dim rst As DAO.Recordset
        Dim tdf As DAO.TableDef
        Dim fld As DAO.Field
     
        ' Création de la table de destination
        If TableExiste(strTableDestination) Then DoCmd.DeleteObject acTable, strTableDestination
        DoCmd.RunSQL ("CREATE TABLE " & strTableDestination & ";")
     
        ' Création des champs de la table de destination
        With CurrentDb
            .TableDefs.Refresh
            Set rst = .OpenRecordset("SELECT DISTINCT Marque FROM " & strTableOrigine & ";")
            Set tdf = .TableDefs(strTableDestination)
        End With
     
        Set fld = tdf.CreateField("Ref-NPS", dbText, 55)
        tdf.Fields.Append fld
     
        While Not rst.EOF
            Set fld = tdf.CreateField(Replace(rst(0), ".", "_"), dbText, 55)
            tdf.Fields.Append fld
            rst.MoveNext
        Wend
     
        ' Libération des variables
        Set rst = Nothing
        Set tdf = Nothing
        Set fld = Nothing
    End Function
     
    Public Function TableExiste(ByVal strTable As String) As Boolean
        Dim tdf As DAO.TableDef
     
        ' Parcourir toutes les tables de la base
        For Each tdf In CurrentDb.TableDefs
          If tdf.Name = strTable Then
            ' La table a été trouvée...
            TableExiste = True
            Exit Function
          End If
        Next
     
        ' La table n'existe pas...
        TableExiste = False
    End Function
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  3. #3
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut RE. Problème sur requètes de mise en colonne de data multis occurence
    Bonjour.

    merci pour ta reponse. le code founrni donne le meme resultas que la reqette sans "group by"
    pour cette table

    Ref-NPS_____ Marque_______Ref
    D330O01_____A.B.S_______15770
    D330O01_____ A.B.S_______16542
    D330O01_____ACDelco____AC2079D
    D330O02_______AP_______20238E
    D330O01______APEC______DSK221
    D330O01______APEC______DFK124




    j'ai ceci
    ______________AP______APEC________ACDelco______A.B.S
    D330O01_____________DFK124_________________________
    D330O01_______________________________________15770
    D330O01_______________________________________16542
    D330O01___________________________AC2079D__________
    D330O01_____________DSK221_________________________
    D330O02____2038E___________________________________


    je souhaiterai avoir un regroupement mais au cas plusieur ref pour meme ref-NPS pour la marque "A.B.S" ou autre
    j'ai fais pour voir un tableau dynamique croise et le resultat affiché est est ce que je souhaiterai avoir sous forme de table.
    il applique un groupage et au cas plusieur ref pour plusieur marque une ligne est cree ainsi de suite.

    ______________AP______APEC________ACDelco______A.B.S
    D330O01______________DSK221______AC2079D_____15770
    D330O01______________DFK124___________________16542 "cette deuxieme ligne n'est pas pris en compte"
    D330O02____2038E___________________________________

    Merci d'avance pour vos lumiere.
    Jeanmi.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Ah ok. Désolé je suis allé un peu trop vite :p
    Avec ça ça devrait aller :
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    Option Compare Database
    Option Explicit
     
    Const tblOrigine As String = "maTable"
    Const tblDestination As String = "T_result"
     
    Public Function analyseCroisee()
        Dim strSQL As String
        Dim rst As DAO.Recordset
        Dim rst2 As DAO.Recordset
        Dim boolUpdate As Boolean
     
        creerTableDestination tblDestination
        Set rst = CurrentDb.OpenRecordset("SELECT [Ref-NPS], Marque, Ref FROM " & tblOrigine & ";")
     
        ' Pour chaque enregistrement de la table d'origine
        While Not rst.EOF
            boolUpdate = False
            ' On sélectionne les lignes dans la table de destination où [Ref-NPS] a la même valeur
            Set rst2 = CurrentDb.OpenRecordset("SELECT * FROM " & tblDestination & " WHERE [Ref-NPS]='" & rst(0) & "';")
            ' Pour chacune de ces lignes
            Do While Not rst2.EOF
                ' Si le champ correspondant à la marque est vide
                If IsNull(rst2(Replace(rst(1), ".", "_"))) Then
                    ' On le remplit grâce à une mise à jour du champ
                    rst2.Edit
                    rst2(Replace(rst(1), ".", "_")) = rst(2)
                    rst2.Update
                    boolUpdate = True
                    Exit Do
                End If
                rst2.MoveNext
            Loop
            ' S'il n'y a pas eu de mise à jour du champ correspondant à la marque
            If Not boolUpdate Then
                ' On insère une nouvelle ligne dans la table de destination
                strSQL = "INSERT INTO " & tblDestination & " ([Ref-NPS],[" & Replace(rst(1), ".", "_") & "]) " & _
                         "VALUES ('" & rst(0) & "','" & rst(2) & "');"
                CurrentDb.Execute (strSQL)
            End If
            rst.MoveNext
        Wend
        Set rst = Nothing: Set rst2 = Nothing
    End Function
     
    Private Function creerTableDestination(strTableDestination As String)
        Dim rst As DAO.Recordset
        Dim tdf As DAO.TableDef
        Dim fld As DAO.Field
     
        ' Création de la table de destination
        If TableExiste(strTableDestination) Then DoCmd.DeleteObject acTable, strTableDestination
        DoCmd.RunSQL ("CREATE TABLE " & strTableDestination & ";")
     
        ' Création des champs de la table de destination
        With CurrentDb
            .TableDefs.Refresh
            Set rst = .OpenRecordset("SELECT DISTINCT Marque FROM " & tblOrigine & ";")
            Set tdf = .TableDefs(strTableDestination)
        End With
     
        Set fld = tdf.CreateField("Ref-NPS", dbText, 55)
        tdf.Fields.Append fld
     
        While Not rst.EOF
            Set fld = tdf.CreateField(Replace(rst(0), ".", "_"), dbText, 55)
            tdf.Fields.Append fld
            rst.MoveNext
        Wend
     
        ' Libération des variables
        Set rst = Nothing: Set tdf = Nothing: Set fld = Nothing
    End Function
     
    Public Function TableExiste(ByVal strTable As String) As Boolean
        Dim tdf As DAO.TableDef
     
        ' Parcourir toutes les tables de la base
        For Each tdf In CurrentDb.TableDefs
          If tdf.Name = strTable Then
            ' La table a été trouvée...
            TableExiste = True
            Exit Function
          End If
        Next
     
        ' La table n'existe pas...
        TableExiste = False
    End Function
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

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

Discussions similaires

  1. Problème sur requête SQL (Caféine)
    Par Jean-Pierre49 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/11/2007, 08h19
  2. problème sur requête imbriqué
    Par Dam1en dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/10/2007, 16h55
  3. Problème sur requête : erreur 1111
    Par tiger33 dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/10/2006, 12h30
  4. problème sur requête ajout
    Par yoruichi93 dans le forum Access
    Réponses: 7
    Dernier message: 10/05/2006, 14h51
  5. Problème sur requête insert mysql
    Par kcizth dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/02/2006, 18h37

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