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 :

Requete complexe pour stats


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Points : 20
    Points
    20
    Par défaut Requete complexe pour stats
    Bonjour, j'ai besoin de qq conseils pour obtenir une requete me permettant d'obtenir les montants cumulés de X factures par client.
    J'ai deja une premiere requete qui me donne toutes les factures sur un période donnée et une zone geograhique donnée. Je voudrais donc m'appuyer sur cette selection pour avoir le total par client , lorqu'ils ont eu au moins 3 factures. Comme c'est pas assez compliqué , ces 3 factures parmi "n" ne doivent etre que les 3 plus importantes (decroiss.) Tous les clients n'ayant pas 3 factures ne doivent pas etre remontés.

    Merci de votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour et bonne fête à mes voisins du dessous.



    Un virtuose du SQL passera peut-être pour te proposer UNE requête.

    Sinon voici une proposition :

    Soit la table :



    Une requête pour ranger les factures



    Elle donne ceci



    Et un code pour cumuler les 3 plus grosses de chacun :

    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
    Option Compare Database
    Option Explicit
     
     
    Public Sub Les3Factures()
      Dim rst As Recordset
      Dim i As Integer
      Dim lClient As Long
      Dim dTotal As Double
      Dim sSql As String
      'Vidanger tResultat
      DoCmd.SetWarnings False
      DoCmd.RunSQL "DELETE * FROM tResultat;"
      Set rst = CurrentDb.OpenRecordset("rFacRangees")
      rst.MoveFirst
      i = 1
      lClient = rst("Client")
      Do Until rst.EOF
        If lClient = rst("Client") Then
            Select Case i
              Case Is <= 3 'on cumule pour ce client
                dTotal = dTotal + rst("Montant")
                i = i + 1  ' après traitement de la 3e facture, i = 4
                rst.MoveNext
              Case Is > 3 ' on ne cumule plus pour ce client
                rst.MoveNext
            End Select
          Else
            'Rupture Ajouter dans la table le cumul du client précédent, si i>=3
            If i = 4 Then  'donc, s'il y a eu au moins 3 factures
                sSql = "INSERT INTO tResultat ( Client, Total3Factures ) SELECT " & lClient & " AS Expr1, " & dTotal & " AS Expr2;"
                DoCmd.RunSQL sSql
                'réinitialiser les compteurs pour client suivant
                lClient = rst("Client")
                dTotal = 0
                i = 1
              Else
                lClient = rst("Client")
                dTotal = 0
                i = 1
            End If
        End If
      Loop
      'Traitement du dernier client de la liste
      If i = 4 Then
          sSql = "INSERT INTO tResultat ( Client, Total3Factures ) SELECT " & lClient & " AS Expr1, " & dTotal & " AS Expr2;"
          DoCmd.RunSQL sSql
      End If
      'Montrer le résultat
      DoCmd.OpenTable "tResultat"
      'sortir
      DoCmd.SetWarnings True
      rst.Close
      Set rst = Nothing
    End Sub
    Le résultat

    Fichiers attachés Fichiers attachés
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Membre à l'essai
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par ClaudeLELOUP Voir le message
    Bonjour et bonne fête à mes voisins du dessous.
    .. merci pour ton aide Claude, j'ai trouvé une solution d'apprenti virtuose..tout en requete

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    j'ai trouvé une solution d'apprenti virtuose..tout en requete
    ... Et tu peux partager ta solution ?
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  5. #5
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Voici une proposition sans code, mais plus laborieuse !

    La table test



    Pour la plus grosse des trois :



    Pour celle qui vient en deuxième :



    Et enfin, pour la troisième :



    Et le résultat en combinant :



    Le même résultat que celui obtenu avec la première méthode :

    Fichiers attachés Fichiers attachés
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

Discussions similaires

  1. [MySQL] une requete complexe, enfin trop pour moi
    Par sp2308 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/06/2009, 22h06
  2. requete complexe pour un débutant !
    Par pelloq1 dans le forum Requêtes
    Réponses: 1
    Dernier message: 29/05/2008, 20h20
  3. Requete concernant des dates un peu complexe (pour moi)
    Par fayred dans le forum Requêtes
    Réponses: 6
    Dernier message: 22/02/2008, 08h26
  4. débutant et requete complexe (pour moi)
    Par fred0655 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/09/2007, 15h20
  5. Réponses: 3
    Dernier message: 18/11/2006, 20h21

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