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 :

SUM() OVER(PARTITION BY) [2014]


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 SUM() OVER(PARTITION BY)
    Bonjour à tous,

    Voilà, j'ai une épine dans le pied !!
    Dans l'échantillon de donnée issue de la requête ci-dessous, je ne parviens pas à calculer "Taux_Reb_Day" correctement.
    En effet, ce taux doit inclure aussi la SOMME des "QTOT" dont le "MR" est = 0, dans le calcul du OVER PARTITION BY. Soit une SOMME de 249 en plus pour chacun des autres différent "MR".

    Le résultat attendu est donc le suivant :
    Taux_REB_Day = 5.37 quand "MR" = 01
    Taux_REB_Day = 6.39 quand "MR" = 03
    Taux_REB_Day = 1.27 quand "MR" = 06
    Taux_REB_Day = 0.25 quand "MR" = 19

    Je sais que l'explication semble un peu compliqué mais c'est pas facile à expliquer..

    Merci pour votre aide.

    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
     
    UP     DATREAL                 MICRO  JL        MR              Libelle                     QTOT     QREB      Taux_Reb_DAY
    5	2017-05-18 00:00:00.000	H0851	RF	0                                             27	0	0
    5	2017-05-18 00:00:00.000	H0851	RF	0                                             26	0	0
    5	2017-05-18 00:00:00.000	H0851	RF	0                                             27	0	0
    5	2017-05-18 00:00:00.000	H0851	RF	0                                             30	0	0
    5	2017-05-18 00:00:00.000	H0851	RF	0                                             26	0	0
    5	2017-05-18 00:00:00.000	H0851	RF	0                                             27	0	0
    5	2017-05-18 00:00:00.000	H0851	RF	0                                             30	0	0
    5	2017-05-18 00:00:00.000	H0851	RF	0                                             29	0	0
    5	2017-05-18 00:00:00.000	H0851	RF	0                                             27	0	0
    5	2017-05-18 00:00:00.000	H0851	RF	01	INCLUSIONS                      	2	2	9.68
    5	2017-05-18 00:00:00.000	H0851	RF	01	INCLUSIONS                      	25	7	9.68
    5	2017-05-18 00:00:00.000	H0851	RF	01	INCLUSIONS                      	29	1	9.68
    5	2017-05-18 00:00:00.000	H0851	RF	01	INCLUSIONS                      	1	1	9.68
    5	2017-05-18 00:00:00.000	H0851	RF	01	INCLUSIONS                      	26	1	9.68
    5	2017-05-18 00:00:00.000	H0851	RF	01	INCLUSIONS                      	1	1	9.68
    5	2017-05-18 00:00:00.000	H0851	RF	01	INCLUSIONS                      	28	2	9.68
    5	2017-05-18 00:00:00.000	H0851	RF	01	INCLUSIONS                      	29	1	9.68
    5	2017-05-18 00:00:00.000	H0851	RF	01	INCLUSIONS                      	26	1	9.68
    5	2017-05-18 00:00:00.000	H0851	RF	01	INCLUSIONS                      	1	1	9.68
    5	2017-05-18 00:00:00.000	H0851	RF	01	INCLUSIONS                      	27	2	9.68
    5	2017-05-18 00:00:00.000	H0851	RF	01	INCLUSIONS                      	22	1	9.68
    5	2017-05-18 00:00:00.000	H0851	RF	03	RETASSURES RESSUAGE             	27	6	17.61
    5	2017-05-18 00:00:00.000	H0851	RF	03	RETASSURES RESSUAGE             	1	1	17.61
    5	2017-05-18 00:00:00.000	H0851	RF	03	RETASSURES RESSUAGE             	1	1	17.61
    5	2017-05-18 00:00:00.000	H0851	RF	03	RETASSURES RESSUAGE             	25	7	17.61
    5	2017-05-18 00:00:00.000	H0851	RF	03	RETASSURES RESSUAGE             	2	2	17.61
    5	2017-05-18 00:00:00.000	H0851	RF	03	RETASSURES RESSUAGE             	30	2	17.61
    5	2017-05-18 00:00:00.000	H0851	RF	03	RETASSURES RESSUAGE             	28	1	17.61
    5	2017-05-18 00:00:00.000	H0851	RF	03	RETASSURES RESSUAGE             	28	5	17.61
    5	2017-05-18 00:00:00.000	H0851	RF	06	MALVENUES-REPRISES-GTTES FROIDES	28	2	6.02
    5	2017-05-18 00:00:00.000	H0851	RF	06	MALVENUES-REPRISES-GTTES FROIDES	28	1	6.02
    5	2017-05-18 00:00:00.000	H0851	RF	06	MALVENUES-REPRISES-GTTES FROIDES	27	2	6.02
    5	2017-05-18 00:00:00.000	H0851	RF	19	MODELES CIRE                    	1	1	100
    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
     
    select UP
    		, DATREAL
    		, MICRO
    		, JL
    		, MR
    		, Libelle
    		, QBON + QREB as QTOT
    		, QREB
    		,Case When sum(QBON) OVER(PARTITION BY Micro, JL,MR, datreal) + Sum(QREB) OVER(PARTITION BY Micro, JL,MR, datreal) = 0 Then
    			0
    			Else
    			Round(
    				(sum(Qreb) OVER(PARTITION BY Micro, JL,MR, datreal) / convert(float,(sum(QBON) OVER(PARTITION BY Micro, JL,MR, datreal)  
    																				+ Sum(QREB) OVER(PARTITION BY Micro, JL,MR, datreal))
    																			)
    				) * 100 
    			,2)  
    			End AS Taux_Reb_DAY
     
    		from dbo.CID06_Analyse_des_Rebuts
     
    		where UP='5' and Datreal >= Getdate()-100
    	and QReb >=0
     
    	and Micro = 'H0851'
    	and Datreal ='18/05/2017'
    	and JL='RF'
     
    	order by Datreal, Micro, MR

  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
    Citation Envoyé par guilld Voir le message
    ce taux doit inclure aussi la SOMME des "QTOT" dont le "MR" est = 0
    Ce qui peut se calculer comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SUM(CASE WHEN MR = 0 THEN QTOT END) OVER()
    Ou en faisant une sous requête scalaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT SUM(QTOT)
    FROM LaTable
    WHERE MR = 0

    Pour une aide plus précise, un jeu d'essai sous forme de CREATE TABLE serait le bienvenu.

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Par défaut
    Pfff !! trop facile !
    encore une médaille pour aieeeuuuuu

    Faut dire aussi que j'avais bien expliqué

    Bon ben merci !

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

Discussions similaires

  1. Over Partition By
    Par logiciel_const dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/02/2011, 16h01
  2. Postgre Over Partition By
    Par the java lover dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 01/08/2008, 09h11
  3. Over Partition SQL Server
    Par dosilbr dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/06/2008, 09h08
  4. Over Partition By - Doublon
    Par zizou771 dans le forum SQL
    Réponses: 8
    Dernier message: 23/01/2008, 18h26
  5. Query, sum over fields that have the same ID as the active field
    Par piers dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 28/04/2007, 11h33

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