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 :

Problème de somme dans une requête


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 25
    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 : 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
    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 !

  2. #2
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 25
    Par défaut
    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 !

  3. #3
    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
    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.

  4. #4
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 25
    Par défaut
    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!

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

Discussions similaires

  1. Problème de précision dans une requête
    Par Le Pharaon dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 09/08/2006, 14h16
  2. Problème de décimales dans une requête
    Par pellec dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 21/07/2006, 08h15
  3. [10g] Problème de privilège dans une requête
    Par hotkebab99 dans le forum Oracle
    Réponses: 6
    Dernier message: 01/03/2006, 12h00
  4. Problème de perfomances dans une requête
    Par claralavraie dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/01/2006, 14h25
  5. Problème de débutant dans une requête
    Par decour dans le forum Access
    Réponses: 7
    Dernier message: 14/10/2005, 14h17

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