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 :

Somme cumulative récalcitrante! [2008]


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
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Par défaut Somme cumulative récalcitrante!
    Bonjour,

    Je tente depuis plusieurs heures de faire une somme cumulative sans succés. J'obtiens tout sauf ce que je veux..
    Voici la table en question:

    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
    ID	Micro	JL	IGA	SGA	ILO	Delai
    1	04690	CI	G00	035	CI1	3
    2	04690	ML	G00	055	000	5
    3	04690	PB	G00	125	000	0
    4	04690	P3	G00	145	PF1	0
    5	04690	T2	G00	155	000	0
    6	04690	P4	G00	205	PF1	0
    7	04690	R4	G00	225	000	0
    8	04690	EM	G00	235	000	0
    9	04690	EX	G00	240	000	0
    1	04690	CI	G03	035	CI1	3
    2	04690	ML	G03	055	ML1	2
    3	04690	FU	G03	065	BK1	3
    4	04690	PB	G03	145	PB1	3
    5	04690	T2	G03	165	TH1	0
    6	04690	P3	G03	193	PF1	0
    7	04690	P4	G03	205	PF1	0
    8	04690	R4	G03	225	RZ1	1.5
    9	04690	EM	G03	235	000	0
    10	04690	EX	G03	240	000	0
    Ce que je cherche à faire c'est une somme de DELAI par rapport à la colonne ID. Si l'ID recommence à "1" alors la somme reprend de "0"..

    Résultat escompter :

    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
    ID	Micro	JL	IGA	SGA	ILO	Delai  Cumul
    1	04690	CI	G00	035	CI1	3       3
    2	04690	ML	G00	055	000	5       8
    3	04690	PB	G00	125	000	0       8
    4	04690	P3	G00	145	PF1	0       8
    5	04690	T2	G00	155	000	0       8
    6	04690	P4	G00	205	PF1	0       8
    7	04690	R4	G00	225	000	0       8
    8	04690	EM	G00	235	000	0       8
    9	04690	EX	G00	240	000	0       8
    1	04690	CI	G03	035	CI1	3       3
    2	04690	ML	G03	055	ML1	2       5
    3	04690	FU	G03	065	BK1	3       8
    4	04690	PB	G03	145	PB1	3       11
    5	04690	T2	G03	165	TH1	0       11
    6	04690	P3	G03	193	PF1	0       11
    7	04690	P4	G03	205	PF1	0       11
    8	04690	R4	G03	225	RZ1	1.5    12.5
    9	04690	EM	G03	235	000	0       12.5
    10	04690	EX	G03	240	000	0       12.5
    Merci pour ce coup de main..

    Signé: "Patte de poulet" (clin d'oeil à SQLPRO)

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Il n'y que la colonne ID comme indicateur de l'ordre des lignes ?
    Montre nous les requêtes que tu as testées, il y manque peut-être juste une virgule
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Par défaut
    Alors ce qui peut donner l'ordre des lignes c'est l'ID effectivement. Aprés on peut aussi se baser sur SGA car ils sont dans l'ordre croissant.
    Si je prends la colonne IGA (G00) par exemple, on voit que SGA est bien trié.

    Mon bout de code qui se rapproche le plus à la cible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select T1.ID, T1.Micro, T1.JL, T1.IGA,T1.SGA,T1.ILO,T1.Delai
    		,(select sum(T2.delai) from #Tmp T2
    			where T2.ID <= T1.ID)
    from #tmp T1
    => donne comme résultat : On voit bien que les DELAI sont sommés par ID..!

    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
    ID	Micro	JL	IGA	SGA	ILO	Delai	(No column name)
    1	04690	CI	G00	035	CI1	3	6
    2	04690	ML	G00	055	000	5	13
    3	04690	PB	G00	125	000	0	16
    4	04690	P3	G00	145	PF1	0	19
    5	04690	T2	G00	155	000	0	19
    6	04690	P4	G00	205	PF1	0	19
    7	04690	R4	G00	225	000	0	19
    8	04690	EM	G00	235	000	0	20.5
    9	04690	EX	G00	240	000	0	20.5
    1	04690	CI	G03	035	CI1	3	6
    2	04690	ML	G03	055	ML1	2	13
    3	04690	FU	G03	065	BK1	3	16
    4	04690	PB	G03	145	PB1	3	19
    5	04690	T2	G03	165	TH1	0	19
    6	04690	P3	G03	193	PF1	0	19
    7	04690	P4	G03	205	PF1	0	19
    8	04690	R4	G03	225	RZ1	1.5	20.5
    9	04690	EM	G03	235	000	0	20.5
    10	04690	EX	G03	240	000	0	20.5
    => autre requête testée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select distinct  A2.*, B2.CumDelai
    from #Tmp A2
    Cross apply (
    			Select sum(A1.Delai) as CumDelai
    			From #Tmp A1
    			Where A1.ID <= A2.ID
    			group by  A1.IGA
    			)B2
     
    order by A2.Micro, A2.IGA

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Tu n'as pas précisé que IGA était le critère de regroupement...
    As-tu regardé les fonctions de regroupement fenêtrées SUM(...) OVER (PARTITION BY ... ORDER BY ...) ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Par défaut
    Dans la seconde requête il y a le critiére IGA dans le group by.

    Oui j'ai aussi testé le over partition by mais je n'ai plus la requête (effacé par d'autre essai). Mais attention car je suis en sql 2008 donc limité (pas d'ORDER possible avec un SUM(Delai) OVER (PARTITION BY..) ).

  6. #6
    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,

    Citation Envoyé par guilld Voir le message
    (pas d'ORDER possible avec un SUM(Delai) OVER (PARTITION BY..)
    C'est bien dommage, c'eut en effet été la solution la plus simple.

    Du coup, il va effectivement falloir faire une requete telle que celles que vous avez faites, dans laquelle il manque juste une condition d'égalité sur la colonne IGA.

    Vous pourriez, dans le même esprit que vos requetes, faire simplement une autojointure sur les mêmes critères.

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

Discussions similaires

  1. somme cumulative su BO reporter
    Par cricri2607 dans le forum Débuter
    Réponses: 4
    Dernier message: 26/11/2008, 11h40
  2. Somme cumulative sur 12 mois glissant
    Par Ptij16 dans le forum Deski
    Réponses: 6
    Dernier message: 13/07/2007, 10h24
  3. somme cumulative sql
    Par marcdonaldwilfried dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/04/2007, 12h25
  4. ! Somme Cumulative en SQL !
    Par dom283 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/03/2007, 18h25
  5. somme cumulative
    Par gsquad dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2006, 17h18

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