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 :

Calculer la progression faite chaque mois par rapport au mois de l'année précédente [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2009
    Messages : 59
    Points : 44
    Points
    44
    Par défaut Calculer la progression faite chaque mois par rapport au mois de l'année précédente
    Bonjour, j'ai crée une requête m'affichant par année et par mois le volume acheté a chaque fournisseur. Le mois et l'année sont extraits d'une date a l'aide de DatePart donc ce sont des données numériques.

    J'aimerai calculer la progression faite chaque mois par rapport au mois de l'année précédente :
    par exemple au mois de janvier 2008 le volume serait de 5 000, et celui du mois de janvier 2009 de 15 000, la progression serait donc de 300%.
    Je ne sais pas s'il est possible de connaitre cela par une simple requete.
    Dans tous les cas je suis bloqué ...

    Merci d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    salut,
    tu peux le faire oui, voici les étapes pour y arriver
    - trouver la valeur du mois de l'année précédente (DateDiff())
    - afficher dans la requête la valeur du mois et du mois - 1 an
    - effectuer le calcul de ratio de progression (Van - Van-1 / Van-1)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 866
    Points
    56 866
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    …J'aimerai calculer la progression faite chaque mois par rapport au mois de l'année précédente :
    par exemple au mois de janvier 2008 le volume serait de 5 000, et celui du mois de janvier 2009 de 15 000,…
    …Je ne sais pas s'il est possible de connaitre cela par une simple requête
    C’est possible avec une requête+ sous-requête synchronisée.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT S.NumFournisseur, S.NumMois, S.NumAnnee, S.Volume AS VolumeAnnee,
    (SELECT Volume FROM Tarequete R WHERE (R.NumFournisseur=S.NumFournisseur AND R.NumMois=S.NumMois AND R.NumAnnee=S.NumAnnee-1)) AS VolumeAnneePrecedente FROM Tarequete S

    En gros, pour chaque ligne de Tarequete (avec l’alias S), on parcourt les lignes d’une copie de Tarequete (avec l’alias R) pour rechercher le volume de l’année précédente (WHERE… R.NumAnnee=S.NumAnnee-1).

    Pour le moment la requête affiche le volume de l’année (VolumeAnnee) et celui de l’année précédente (VolumeAnneePrecedente) s’il existe. Je te laisse compléter avec la mormule adéquate pour calculer la progression.

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2009
    Messages : 59
    Points : 44
    Points
    44
    Par défaut
    Bonjour, merci pour votre aide et désolé pour la réponse tardive.

    f-leb, j'ai essayé ce que tu m'as proposé et en lancant la requete j'ai une erreur : "You tried to execute a query that does not include the specified expression " as part of an aggregate function.
    Je doute avoir fait ce qu'il fallait donc j'ai crée une base plus simple pour illustrer l'exemple, elle reprend les ventes d'un objet quelconque.
    La table T_Ventes contient les champs suivant :
    - Vente_type : petit ou grand
    - Vente_date
    - Vente_Amount

    J'ai tout d'abord crée une requete "T_Ventes 1" qui affiche la table T_Ventes ainsi que "Type_ID" provenant de la table "T_types" (liste de choix "petit" ou "grand"). J'ai ensuite fait une copie de cette requete que j'ai nommé "T_Ventes 11".
    Ensuite j'ai cree une derniere requete "T_Ventes 2" dans laquelle j'ai le code suivant :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT [T_Ventes 1].Vente_type, [T_Ventes 1].Type_ID, [T_Ventes 1].Year, [T_Ventes 1].Nmonth, [T_Ventes 1].Month, [T_Ventes 1].Vente_amount AS VolY, (SELECT Vente_amount FROM [T_Ventes 11] WHERE ((([T_Ventes 11].Type_ID)=[T_Ventes 1].[Type_ID]) AND (([T_Ventes 11].Nmonth)=[T_Ventes 1].[Nmonth]) AND (([T_Ventes 11].Year)=[T_Ventes 1].[Year]-1)) ) AS VolPY
    FROM [T_Ventes 1]
    GROUP BY [T_Ventes 1].Vente_type, [T_Ventes 1].Type_ID, [T_Ventes 1].Year, [T_Ventes 1].Nmonth, [T_Ventes 1].Month, [T_Ventes 1].Vente_amount
    ORDER BY [T_Ventes 1].Vente_type;

    Et c'est la que j'ai l'erreur, je doute avoir fait ce qu'il fallait mais je ne suis qu'un debutant en SQL.

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 621
    Points : 56 866
    Points
    56 866
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    f-leb, j'ai essayé ce que tu m'as proposé et en lancant la requete j'ai une erreur :"You tried to execute a query that does not include the specified expression as part of an aggregate function"
    L’erreur se produit en principe en cas de mauvaise utilisation d’une clause GROUP BY ou de fonctions de regroupement (compte, somme, moyenne,…) ce qui m’étonne puisque la requête que j’ai proposée ne comporte rien de tout ça (seulement deux requêtes SELECT…WHERE imbriquées).


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT S.NumFournisseur, S.NumMois, S.NumAnnee, S.Volume AS VolumeAnnee,
    (SELECT Volume FROM Tarequete R WHERE (R.NumFournisseur=S.NumFournisseur AND R.NumMois=S.NumMois AND R.NumAnnee=S.NumAnnee-1)) AS VolumeAnneePrecedente FROM Tarequete S

    Pour préciser les choses, j’ai supposé d’après ton 1er post que tu avais déjà une table ou une requête que j’ai nommée « Tarequete ».
    « Tarequette » avec les champs NumFournisseur, NumMois(entre 1 et 12), NumAnnee, Volume.

    ...J'aimerai calculer la progression faite chaque mois par rapport au mois de l'année précédente :
    par exemple au mois de janvier 2008 le volume serait de 5 000, et celui du mois de janvier 2009 de 15 000, la progression serait donc de 300%.
    Soient les lignes retournées pour le fournisseur 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    NumFournisseur   NumAnnée  NumMois   VolumeAnnee   VolumeAnnePrecedente
     
          1         2008          1           5000     
     
          1         2009          1           15000          5000
    Reste à rajouter la formule pour calculer la progression :
    (VolumeAnnee- VolumeAnnePrecedente)/ VolumeAnnePrecedente

    Tu peux aussi trier les lignes retournées en rajoutant :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY S.NumFournisseur, S.NumAnnee, S.NumMois

    En espérant que tu obtiennes bien le résultat escompté car j’avoue ne pas avoir eu le temps de regarder ta dernière requête « T_Ventes 2 » (essaye quand même en enlevant le GROUP BY).

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2009
    Messages : 59
    Points : 44
    Points
    44
    Par défaut
    En enlevant le "group by" tout fonctionne parfaitement avec mon exemple. Il ne me reste plus qu'à l'adapter a ma vraie base.

    Merci beaucoup pour ton aide

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 03/02/2014, 10h54
  2. [Débutant] Calcul debut et fin de semaine par rapport à une date
    Par shaun_the_sheep dans le forum C#
    Réponses: 3
    Dernier message: 17/07/2012, 08h25
  3. Calcul % d'ecart d'un point par rapport droite de tendance
    Par mat-tech dans le forum Statistiques, Data Mining et Data Science
    Réponses: 3
    Dernier message: 16/06/2008, 19h23
  4. calcul en mois par rapport a une date
    Par azde7015 dans le forum Access
    Réponses: 12
    Dernier message: 22/03/2006, 09h50
  5. requete par rapport au mois
    Par tounsi dans le forum Oracle
    Réponses: 15
    Dernier message: 11/01/2006, 16h49

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