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 :

problem avec la fonction SUM


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut problem avec la fonction SUM
    bonjour à tous

    base de donné SQL server 2005

    j'ai un problème avec une requête celle ci fonctionne bien mais je voudrais rajouter le total des résultats de deux colonnes .
    j'ai utiliser la fonction sum je n'est pas mon résultat et j'ai le message suivant :

    Warning: Null value is eliminated by an aggregate or other SET operation.

    (1534 row(s) affected)
    comment puis-je contourner ce message

    voici ma requête

    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
    Select 
    T0.docnum , 
    T0.Itemcode ,
    T1.ItemName,
    T0.Duedate, 
    T0.U_Datefinof,
    T0.U_Machine,
    T0.U_personnel ,
    sum (T0.U_NbreHeureOF) AS [Nombre d'heure prévue] ,
    sum (T0.U_NbreHeurereelle) AS [Nombre d'heure Réel],
    (T0.U_NbreHeurereelle - T0.U_NbreHeureOF) AS [Ecart],
    T2.Name,
    T0.U_Reglage,
    (T0.U_tpsreg ), 
    (T0.U_Reglage - T0.U_tpsreg ) AS [Ecart]
    from OWOR T0 
    inner join OITM T1 on T0.itemcode = T1.Itemcode
    full join [@REGLEUR] T2 on T0.U_regleur = T2. Code
    full join [@PERSOCCT] T3 on T0.U_personnel = T3.Code
    where T0.Status = 'L'
     
    group by 
    T0.docnum , 
    T0.Itemcode ,
    T1.ItemName,
    T0.Duedate, 
    T0.U_Datefinof,
    T0.U_Machine,
    T0.U_personnel ,
    T0.U_NbreHeurereelle,
    T0.U_NbreHeureOF,
    (T2.Name),
    T0.U_Reglage,
    T0.U_tpsreg

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Normalement les colonnes T0.U_NbreHeureOF et T0.U_NbreHeurereelle devraient par défaut avoir la valeur 0.
    Vous pouvez peut-être passer outre ce message en écrivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sum (ISNULL(T0.U_NbreHeureOF, 0)) AS [Nombre d'heure prévue] ,
    sum (ISNULL(T0.U_NbreHeurereelle, 0)) AS [Nombre d'heure Réel],
    Mais vous devez prendre cela pour un patch temporaire.

    Je vois que vous utilisez des variables de type TABLE : sachez que c'est particulièrement contre-performant et que cela n'a rien de temporaire.
    En effet, comme toute table, elle doit être persistée et elle l'est dans la base de données TempDB qui est utilisée pour bien d'autre processus par SQL Server.
    En plus de cela, aucune statistique de colonne n'est maintenue sur ce type de table, donc il est impossible d'en obtenir un bon plan de requête

    @++

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    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
    Select 
    (T0.docnum) , 
    (T0.Itemcode),
    (T1.ItemName),
    (T0.Duedate), 
    (T0.U_Datefinof),
    (T0.U_Machine),
    (T0.U_personnel),
    sum (ISNULL (T0.U_NbreHeureOF, 0 )) AS [Nombre d'heure prévue] ,
    sum (ISNULL (T0.U_NbreHeurereelle, 0 )) AS [Nombre d'heure Réel],
    (T0.U_NbreHeurereelle - T0.U_NbreHeureOF)AS [Ecart] ,
    T2.Name,
    T0.U_Reglage,
    T0.U_tpsreg , 
    (T0.U_Reglage - T0.U_tpsreg ) AS [Ecart]
    from OWOR T0 
    inner join OITM T1 on T0.itemcode = T1.Itemcode
    full join [@REGLEUR] T2 on T0.U_regleur = T2. Code
    full join [@PERSOCCT] T3 on T0.U_personnel = T3.Code
    where T0.Status = 'L'
     
     
    group by 
    T0.docnum , 
    T0.Itemcode ,
    T1.ItemName,
    T0.Duedate, 
    T0.U_Datefinof,
    T0.U_Machine,
    T0.U_personnel ,
    T0.U_NbreHeurereelle,
    T0.U_NbreHeureOF,
    (T2.Name),
    T0.U_Reglage,
    T0.U_tpsreg

    merci de cette astuce car je n'est plus le message d'erreur mais je n'est toujours pas mon total en bas des collone :

    T0.U_NbreHeureOF et T0.U_NbreHeurereelle


    je suis sur sap Business One et les variables sont faite par lui qd on crée une table supplémentaire si j'attaque la table sans mettre @ il ne la reconnait pas .
    le nom de ma table en création est régleur et SAP me donne comme nom pour l'attaquer @REGLEUR

    je ne vois pas comment faire autrement . si vous avez une autre idée je suis preneur .

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Dans ce cas les concepteurs de SAP, et j'en viens à croire des ERP, ne s'intéressent pas au fonctionnement des SGBDR.

    Vous ne pouvez obtenir le cumul des valeurs qu'en utilisant la clause WITH ROLLUP de GROUP BY, et en filtrant le résultat global ...

    Pour moi il s'agit là de présentation, et cela ne doit jamais être fait au niveau des données.
    Si c'est pour du reporting, je ne doute pas ce que SAP sache calculer et présenter ce que vous recherchez

    @++

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    merci du conseil sur le rollup je vais tester

    malheureusement la version que nous avons de SAP ne permet pas en standard de faire un reporting sur les champ rajouter par nous même (un gros défaut de Buinesse one )

    je suis soit obliger de passer par un addon mais celui ci ne permet pas l'envoie automatique d'émail

    donc mon seul moyen est de faire des requêtes et des les inclures dans les fonction alertes de SAP Business One ....

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 27
    Points : 11
    Points
    11
    Par défaut
    la fonction rollup me jette car j'ai plus de 10 expression ,

    donc j'ai scinder les deux requête de la manière suivante

    requete 1
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Select 
    (T0.docnum) , 
    (T0.Itemcode),
    (T1.ItemName), 
    (T0.U_Datefinof),
    (T0.U_Machine),
    (T0.U_personnel),
    sum (ISNULL (T0.U_NbreHeureOF, 0 )) AS [Nombre d'heure prévue] ,
    sum (ISNULL (T0.U_NbreHeurereelle, 0 )) AS [Nombre d'heure Réel],
    (T0.U_NbreHeurereelle - T0.U_NbreHeureOF)AS [Ecart] 
    from OWOR T0 
    inner join OITM T1 on T0.itemcode = T1.Itemcode
    full join [@PERSOCCT] T3 on T0.U_personnel = T3.Code
    where T0.Status = 'L'
     
    group by
    T0.docnum , 
    T0.Itemcode ,
    T1.ItemName, 
    T0.U_Datefinof,
    T0.U_Machine,
    T0.U_personnel ,
    T0.U_NbreHeurereelle,
    T0.U_NbreHeureOF
    with Rollup
     
     
    HAVING
       (grouping(T0.DocNum) = 0
    AND grouping(T0.Itemcode) = 0
    AND grouping(T1.ItemName) = 0
    AND grouping(T0.U_dateFinOf)  = 0
    AND grouping(T0.U_Machine)  = 0
    AND grouping(T0.U_personnel)  = 0
    AND grouping(T0.U_Nbreheurereelle)  = 0
    AND grouping(T0.U_NbreheureOF)  = 0
    )
     OR
          (grouping(T0.DocNum) = 1
    AND grouping(T0.Itemcode) = 1
    AND grouping(T1.ItemName) = 1
    AND grouping(T0.U_dateFinOf)  = 1
    AND grouping(T0.U_Machine)  = 1
    AND grouping(T0.U_personnel)  = 1
    AND grouping(T0.U_Nbreheurereelle)  = 1
    AND grouping(T0.U_NbreheureOF)  = 1
    )
    et requête 2
    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 
    (T0.docnum),
    T2.Name,
    sum (ISNULL (T0.U_Reglage,0)),
    (T0.U_tpsreg ), 
    sum (ISNULL (T0.U_Reglage - T0.U_tpsreg,0) ) AS [Ecart]
    from OWOR T0 
    inner join OITM T1 on T0.itemcode = T1.Itemcode
    full join [@REGLEUR] T2 on T0.U_regleur = T2. Code
    full join [@PERSOCCT] T3 on T0.U_personnel = T3.Code
    where T0.Status = 'L'
     
    group by 
    (T0.docnum),
    (T2.Name),
    T0.U_Reglage,
    T0.U_tpsreg 
    with Rollup
     
    HAVING
     
    (Grouping (T0.docnum)= 0
    AND grouping(T2.Name)  = 0
    AND grouping(T0.U_reglage)  = 0
    AND grouping(T0.U_Tpsreg)  = 0)
     OR
      (Grouping (T0.docnum)= 1   
    AND grouping(T2.Name)  = 1
    AND grouping(T0.U_reglage)  = 1
    AND grouping(T0.U_Tpsreg)  = 1)
    par contre maintenant je n'arrive pas à les unir pour n'avoir qu'un seul affichage

    je débute en sql et la je suis largué . encore merci de votre aide

Discussions similaires

  1. [Excel] Probleme avec la fonction SUM
    Par lidouka dans le forum Excel
    Réponses: 2
    Dernier message: 06/03/2007, 13h09
  2. probleme avec la fonction sum (debutant)
    Par mcf1 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/05/2006, 09h38
  3. probleme avec la fonction sum (debutant)
    Par mcf1 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/05/2006, 09h33
  4. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48
  5. pb avec la fonction sum!
    Par ber_jp dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 28/08/2004, 22h22

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