Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/06/2011, 11h17   #1
Invité régulier
 
Inscription : mars 2009
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 25
Points : 7
Points : 7
Par défaut Problème de somme dans une requête

Bonjour, j'ai un problème de somme dans une requête sql.

En gros, j'affiche un nombre d'ordres par statut.
Ma requête est la suivante :
Code :
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
USE ABI_DWH
 
SELECT
  CASE S.[DSR_ID_STATUT_ORDRE_PROVISIONING_PK] 
    WHEN '1'  THEN 'ECHEC'
    WHEN '11' THEN 'ECHEC'
    WHEN '12' THEN 'ECHEC'
    WHEN '7'  THEN 'REUSSITE'
    ELSE 'EN COURS OU EN ATTENTE'
   END 'Statut'
 --  ,S.[DSR_LIB_STATUT_ORDRE_PROVISIONING] 
  ,COUNT ( DISTINCT O.[FHP_ID_ORDRE_PROVISIONING]) Nb_OrdresProvisioning
 
FROM [dbo].[ABI_FCT_ORDRE_PROVISINING] O (NOLOCK)
 
LEFT OUTER JOIN [dbo].[ABI_DIM_STATUT_ORDRE_PROVISIONING] S (NOLOCK) ON 
    O.[FHP_STATUT_PROVISIONING_FK] = S.[DSR_ID_STATUT_ORDRE_PROVISIONING_PK]
 
 
GROUP BY 
  CASE S.[DSR_ID_STATUT_ORDRE_PROVISIONING_PK] 
    WHEN '1'  THEN 'ECHEC'
    WHEN '11' THEN 'ECHEC'
    WHEN '12' THEN 'ECHEC'
    WHEN '7'  THEN 'REUSSITE'
    ELSE 'EN COURS OU EN ATTENTE'
   END
--,S.[DSR_LIB_STATUT_ORDRE_PROVISIONING] 
 
ORDER BY Statut DESC
J'ai le résultat suivant :

Statut Nb_ordres
A 12
B 10
C 30

Revenant mnt à ma requête. Je dé commente le champ S.[DSR_LIB_STATUT_ORDRE_PROVISIONING] pour avoir les sous statuts du statut, et là j'ai un résultat qui me semble être incohérent avec le précédent. Par exemple pour le statut A j'ai des sous statut a , b , c , d etc. Logiquement si je fait la somme du nombre d'ordres de ses sous statuts , je devrai trouver la valeur 12 . Or ce n'est pas le cas.

Donc est ce que le problème vient du count ou dans le groupe by, ou faudrait-il que je fasse une sous requête de count contenu dans une requête de somme.

Merci pour votre aide !
Marsupilami23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 12h02   #2
Invité régulier
 
Inscription : mars 2009
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 25
Points : 7
Points : 7
J'ai modifié ma requête en remplaçant le COUNT par SUM, mais ce n'est pas cohérent. En plus le résultat obtenu n'est pas du tout parlant: les données obtenues sont fausses.

Merci pour vos suggestions !
Marsupilami23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 12h23   #3
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour
Citation:
Logiquement si je fait la somme du nombre d'ordres de ses sous statuts , je devrai trouver la valeur 12 . Or ce n'est pas le cas.
Non !
vous faite un COUNT(DISTINCT )

Dans la première requête, si une valeur apparait plusieurs fois, elle ne sera comptée qu'une fois.
Si vous ajoutez la colonne DSR_LIB_STATUT_ORDRE_PROVISIONING, cette même valeur sera comptée une fois par valeur de DSR_LIB_STATUT_ORDRE_PROVISIONING. Ceci explique la différence...

La solution sera peut être du coté des fonctions de fenêtrage (clause OVER), mais un petit jeu d'essai et le résultat attendu seraient pas mal afin de bien comprendre ce que vous voulez.
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 13h32   #4
Invité régulier
 
Inscription : mars 2009
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 25
Points : 7
Points : 7
J'ai résolu le problème en changeant le champ sur lequel je fais le count.
Les enregistrement contenus dans la table ne correspondent pas à l'information que je voulais.
J'ai donc fait une jointure sur une autre table pour avoir la bonne info.

Et maintenant mon count marche dans les deux cas.

Merci d'avoir consacré de votre temps aieuuuu!
Marsupilami23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h33.


 
 
 
 
Partenaires

Hébergement Web