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

MS SQL Server Discussion :

Cumul avec rupture


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Par défaut Cumul avec rupture
    Bonjour,

    Je me débats depuis un petit moment pour essayer de faire un cumul avec rupture. Après plusieurs recherches j'ai pas réussi dc je me tourne vers vous !

    J'ai donc une table X qui est constitué de :

    ES ANNEE MOIS MT
    02589 2014 01 8
    02589 2014 02 10
    02589 2014 10 5
    04040 2014 01 10
    04040 2014 02 85

    Mont but est donc de sortir une table avec :

    ES ANNEE MOIS MT MT_CUM
    02589 2014 01 8 8
    02589 2014 02 10 18
    02589 2014 10 5 23
    04040 2014 01 10 10
    04040 2014 02 85 95

    Et donc... je sèche !

    Merci par avance !

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Avec une version plus récente de SQL Server, vous auriez pu faire directement la somme cumulative avec un SUM(MT) OVER(PARTITION BY ES ORDER BY ANNEE, MOIS)Avec SQL Server 2005, il faudra faire une auto-jointure :
    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
     
    SELECT 
    	X1.ES
    	,X1.ANNEE
    	,X1.MOIS
    	,X1.MT
    	,SUM(X2.MT) AS Total
    FROM X AS X1
    INNER JOIN X AS X2
    	ON	X2.ES = X1.ES
    	AND (
    		X2.ANNEE < X1.ANNEE
    		OR(
    			X2.ANNEE = X1.ANNEE
    			AND
    			X2.MOIS <= X1.MOIS
    		)
    	)
    GROUP BY 
    	X1.ES
    	,X1.ANNEE
    	,X1.MOIS
    	,X1.MT

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 699
    Par défaut
    Sinon il y a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Select *, SUM(MT) OVER (PARTITION BY ES,ANNEE,MOIS) Somme
    FROM <ma table>
    Ou plus cool en 2012

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Select *, SUM(MT) OVER (PARTITION BY ES,ANNEE,MOIS ROWS BETWEEN CURRENT ROW AND UNBOUNDED PRECEDING) SommeCourante
    FROM <ma table>
    Ou "sql server running total" dans google ;P

Discussions similaires

  1. [2012] cumul avec rupture arrivé à une certaine valeur ?
    Par jord140 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 09/03/2014, 16h55
  2. Réponses: 3
    Dernier message: 02/06/2010, 18h22
  3. [v9][crystal] Calcul Du Total Cumule Avec La Variable Shared
    Par BOMBARDIER dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 31/07/2007, 19h47
  4. Double tri avec rupture
    Par KPitN dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/07/2007, 11h41
  5. Compteur avec rupture sans SQL/99
    Par 1gazelle dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/03/2007, 09h23

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