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 :

requête groupement multiple


Sujet :

Requêtes et SQL.

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 92
    Par défaut requête groupement multiple
    Bonjour,

    Je créé un graphique à partir d'une requête avec le code suivant :

    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
     
    Private Sub Command17_Click()
     
        Dim SQLWhere As String
        SQL = "SELECT Maintenance.Machine, SUM(Maintenance.Temps_passé)as SumOfTemps_passé " & _
              " FROM Maintenance as Maintenance Where Maintenance.ID <> 0 "
        SQL = SQL & " and Maintenance.Datem between " & CLng(Me.date1) - 1 & " and " & CLng(Me.date2) - 1 & " GROUP BY Maintenance.Machine"
     
         SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
         SQL = SQL & ";"
     
         CurrentDb.QueryDefs("reqgraph").SQL = SQL
     
         Graph16.Requery
     
    End Sub
    J'obtiens donc un joli graphique avec le pourcentage de temps passé sur chaque. table Machine : 103, 104, 281, 282, 331, 332.

    Ce que je voudrai maintenant, c'est que mon graphique, au lieu de faire 6 parts à mon camembert (graphe), je n'ai plus que trois parts Galaxie (103, 104), S280 (281, 282) et M3300 (331, 332)

    Merci

  2. #2
    Membre émérite Avatar de ft035580
    Profil pro
    Inscrit en
    Août 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 689

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 92
    Par défaut
    Voilà ce que j'ai fait :

    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
     
    Function groupe(ByVal nom As String) As String
     
        Select Case nom
            Case "103"
            groupe = "Galaxie"
            Case "104"
            groupe = "Galaxie"
            Case "281"
            groupe = "S280"
            Case "282"
            groupe = "S280"
            Case "201"
            groupe = "Gallus"
            Case "203"
            groupe = "Gallus"
            Case "Poste Gallus"
            groupe = "Gallus"
            Case "331"
            groupe = "M3300"
            Case "332"
            groupe = "M3300"
            Case "poste M3300"
            groupe = "M3300"
            Case "Roto1"
            groupe = "Rotoflex"
            Case "Roto2"
            groupe = "Rotoflex"
            Case "Roto3"
            groupe = "Rotoflex"
            Case "Roto4"
            groupe = "Rotoflex"
            Case "Roto5"
            groupe = "Rotoflex"
            Case "Bâtiement"
            groupe = "Autres"
            Case "Labo Cylindre"
            groupe = "Autres"
            Case "Autres"
            groupe = "Autres"
        End Select
     
    End Function
     
     
    Private Sub Command20_Click()
     
        Dim SQLWhere As String
        SQL = "SELECT groupe(maintenance.machine) as Machine, SUM(Maintenance.Temps_passé)as SumOfTemps_passé " & _
              " FROM Maintenance as Maintenance Where Maintenance.ID <> 0 "
        SQL = SQL & " and Maintenance.Datem between " & CLng(Me.date1) - 1 & " and " & CLng(Me.date2) - 1 & " GROUP BY groupe(maintenance.machine)"
        SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
        SQL = SQL & ";"
     
        CurrentDb.QueryDefs("reqgraph").SQL = SQL
     
        Graph16.Requery
     
    End Sub
    Et il me dit qu'il ne connait pas de fonction "groupe".

  4. #4
    Membre émérite Avatar de ft035580
    Profil pro
    Inscrit en
    Août 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 689
    Par défaut
    Je viens de penser à ceci.


    Dans ta requête tu crées un champ Id: Left([Machine],1) qui te donnerait le 1er caractère de tes machines.

    Ensuite tu crées une table de regroupement:

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Id Libellé
    1 Galaxie
    2 S280
    3 M330
    etc ...
    Enfin tu lies le tout par Id.

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 92
    Par défaut
    Je ne comprends pas, je ne connais pas cette dernière technique.

    Que pense tu du programme ci-dessus?

  6. #6
    Membre émérite Avatar de ft035580
    Profil pro
    Inscrit en
    Août 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 689
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TaTable Maintenance
    Machine   Id:Left([Machine],1)  Temps Passé
    103          1                            2
    104          1                            1
    281          2                            1
    282          2                            3
    331          3                            4
    332          3                            2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TaTable Regroupement
    Id   Libellé
    1      Galaxie
    2      S280 
    3      M3300
    Puis tu crées une requête à partir de ces 2 tables liées par ID te donnerait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Ta Requête
    Libellé   Temps passé
    Galaxie       3
    S280          4
    M3300         6

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 92
    Par défaut
    ok!

    A tester mais pour l'instant je reste sur ma fonction car je pense que le pb est mineur. Qd j'ouvre la fonction j'ai ce message d'erreur : 'Fonction 'groupe' non définie dans l'expression'.

    What's up?

  8. #8
    Membre émérite Avatar de ft035580
    Profil pro
    Inscrit en
    Août 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 689
    Par défaut
    Citation Envoyé par yeahyeah
    : 'Fonction 'groupe' non définie dans l'expression'
    Bizarre,

    Je viens de placer ta fonction dans un module et l'ai tester dans une requête et pas de problème apparent.Elle fonctionne.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Sum(Maintenance.Temps_passé) AS SommeDeTemps_passé, groupe([machine]) AS a
    FROM Maintenance
    GROUP BY groupe([machine]);

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 92
    Par défaut
    Donc tu ne sais pas d'où peut provenir ce problème?

  10. #10
    Membre émérite Avatar de ft035580
    Profil pro
    Inscrit en
    Août 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 689
    Par défaut
    Il serait judicieux de placer ta fonction dans un module à part entière et non dans celui de ton formulaire.

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 92
    Par défaut
    C'est à dire?

  12. #12
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 92
    Par défaut
    ca y est, j'ai mis la fonction dans un module.

    Plus d'erreur. Cependant, résultat incohérent.

  13. #13
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 92
    Par défaut
    Le programme rentre bien dans la fonction groupe.

    il renvoi bien à chaque fois M3300, Gallus, ...

    Cependant, le résultat de la requête est :

    Machine Sumoftemps
    100

    au lieu de :

    Machine Sumoftemps
    Gallus 30
    M3300 50
    S280 20

  14. #14
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 92
    Par défaut
    Je ne sais pas faire de tableau sur le forum

    Ce que je voulais dire c'est qu'il fait la somme des temps mais rien n'est écrit dans machine.

Discussions similaires

  1. Problème requête count multiples
    Par kro001 dans le forum Débuter
    Réponses: 3
    Dernier message: 05/10/2007, 21h10
  2. Requête HTTP multiples et Apache
    Par Invité dans le forum Apache
    Réponses: 2
    Dernier message: 16/02/2007, 21h39
  3. Requête à paramètres multiples
    Par b00tny dans le forum Oracle
    Réponses: 12
    Dernier message: 26/04/2006, 11h35
  4. Requête avec multiple clause where
    Par pgenet dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/03/2006, 13h59
  5. problème requête à jointure multiple...
    Par Ricardo_Tubbs dans le forum Access
    Réponses: 6
    Dernier message: 09/02/2006, 16h45

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