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

Développement SQL Server Discussion :

comment faire un cumul progressif par mois en sql


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 217
    Par défaut comment faire un cumul progressif par mois en sql
    Bonjour à tous,

    Je voudrais faire une requête sql qui me renvoi la somme des valeurs de façon cumulative sur les mois de l'année depuis le début de l'année pour voir la progression. Je m'explique :

    j'ai une table contenant par date des produits et des quantités vendues.
    Je voudrais faire une requête qui me renvoi par produit et par mois la somme des quantités depuis le début de l'année de la façon suivante :

    pour janvier : somme des quantités de janvier
    pour février : somme des quantités de janvier + février
    pour mars : somme des quantités de janvier + février + mars
    etc ...

    est ce possible et facilement réalisable ?

    Merci d'avance de votre aide.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Vous n'avez pas beaucoup cherché !
    http://sqlpro.developpez.com/article...clause-window/

    De plus vous n'avez pas respecté la charte de postage :
    http://www.developpez.net/forums/d96...vement-poster/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    -- jeu d'essais :
    CREATE TABLE T_VENTE_VTE (JOUR DATETIME, MONTANT DECIMAL(16,2))
    GO
    INSERT INTO T_VENTE_VTE
    SELECT CAST(CAST(CURRENT_TIMESTAMP AS FLOAT) - 900 * RAND() AS DATETIME),
           RAND() * 10000
    GO 1000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    -- solution :
    SELECT YEAR(JOUR), MONTH(JOUR), MONTANT,
           (SELECT SUM(Tin.MONTANT)
            FROM   T_VENTE_VTE AS Tin
            WHERE  YEAR(Tin.JOUR) = YEAR(Tout.JOUR)
              AND  MONTH(Tin.JOUR) <= MONTH(Tout.JOUR)) AS CUMUL_AN_MOIS
    FROM   T_VENTE_VTE AS Tout 
    ORDER BY 1, 2;
    Et pour apprendre le SQL, mon site web, comme mon bouquin, peuvent vous y aider !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    C'est faisable dès SQL Server 2005 en utilisant une requête récursive introduite par une expression de table commune.

    Donnez la liste des tables qui participent à votre requête ainsi que leur définition pour que nous puissions vous aider à écrire votre requête

    @++

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 217
    Par défaut
    Sqlpro : J'ai cherché (pas des masses je le reconnais mais un peu tout de même) mais j'aurai pu chercher longtemps avant de découvrir les fonctions OLAP ou fenestrées pour solutionner mon problème ! Et puis le forum n'est il pas la pour ça ? En tout cas, Merci pour ta solution. Je vais la tester.

    Elsuket : Ma table est toute simple : Code_produit, Date, Quantité.
    Qu'entends tu par 'requête récursive introduite par une expression de table commune' ? est ce que ça rejoint la proposition de Sqlpro ?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par cana13 Voir le message
    Elsuket : Ma table est toute simple : Code_produit, Date, Quantité.
    Qu'entends tu par 'requête récursive introduite par une expression de table commune' ? est ce que ça rejoint la proposition de Sqlpro ?
    Oui, mais pas tout à fait de la même façon et avec les performances en moins !!!!!

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 217
    Par défaut
    Merci, ça fonctionne super bien. Bonne journée à tous.

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 217
    Par défaut
    Bonjour,

    J'ai placé cette requête dans mon rapport RS mais après quelques tests il s'avère que cela ne fonctionne pas dans le cas suivant :
    si je n'ai pas de valeur pour le dernier mois.

    par exemple si j'interroge mon rapport en mars mais que je n'ai pas encore de valeur pour mars, il ne m'affiche rien alors que je voudrais qu'il me répète la valeur qu'il y avait sur février. (et ainsi de suite sur les autres mois de l'année).

    existe il un moyen de faire cela ?

    merci d'avance.

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

Discussions similaires

  1. Requete SQL : comment faire un cumul
    Par yannick069 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/04/2015, 13h21
  2. cumul vente par mois et par année
    Par christopheS dans le forum Access
    Réponses: 4
    Dernier message: 03/10/2006, 15h01
  3. [MySQL] Comment faire un tableau triable par un utilisateur ?
    Par mLk92 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 15/08/2006, 09h52
  4. Comment faire passer un menu par dessus une autre frame
    Par barthelv dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/11/2005, 11h03
  5. Comment faire générer du rtf par mon application?
    Par nickylarson dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/08/2003, 09h35

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