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

Langage SQL Discussion :

additionner des champs enregistrement par enregistrement


Sujet :

Langage SQL

  1. #21
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut
    j'avais déjà testé la 1ère proposition : en mettant les SUM à l'intérieur des SELECT. la requete ne marche pas, elle renvoie le message d'erreur suivant
    Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
    par contre la 2ème proposition fonctionne, je vais donc m'y consacrer et je devrais m'en sortir !

    Merci bcp aieeeuuuuu

  2. #22
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut
    après avoir testé la 2ème proposition de aieeeuuuuu, je m’aperçois que les résultats affichés sont différents de ce que je devrais obtenir. Je pense que le fait de déplacer à l'extérieur de la sous-requête la jointure entre les tables INVUTILISATIONJOUR et HISPRODBRUT y est pour quelque chose.

    est il possible possible de corriger la 1ère proposition pour q'elle fonctionne ?

  3. #23
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    En effet, je n'avais pas vu les sommes sur les autres colonnes...

    et comme ceci ?

    Code SQL : 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
    48
    49
    50
    51
     
    SELECT cast(B.PRG_CODMRIN AS INTEGER) PRG_CODMRIN,
           MAX(B2.PRB_SEQUENCE) TRI_SEQUENCE,
           sum(I.INV_QTETOTUNITE * J.INV_PRIXUNITE)  PRIX_STOCK_INIT,
           sum(K.NST_STOCKOUV * J.INV_PRIXUNITE) PRIX_NST_STOCKOUV,
           sum(J.INV_QTETOTUNITE * J.INV_PRIXUNITE) PRIX_STOCK_FINAL,
           U.UTJ_QTETOT       
     
    FROM HISPRODBRUT B2,
         INVPRODGENERIQUE G,
         HISPRODBRUT B
         LEFT JOIN INVINVENTAIRE I ON (I.PRB_CODWRIN = B.PRB_CODWRIN AND
          I.CAL_DTACTIVITE = '11/30/2010')
         LEFT JOIN INVINVENTAIRE J ON (J.PRB_CODWRIN = B.PRB_CODWRIN AND
          J.CAL_DTACTIVITE = '4/14/2011')
         LEFT JOIN INVNIVEAUSTOCK K ON (K.PRB_CODWRIN = B.PRB_CODWRIN AND
          K.NST_ANNEE = 2010 AND K.NST_MOIS = 12)
          LEFT OUTER JOIN (
                SELECT 
                    PRB_CODWRIN,
                    SUM(
                         CASE 
                              WHEN UTJ_ANNEE = 2010 AND UTJ_MOIS = 12 
                              THEN UTJ_QTETOTJOUR1 + UTJ_QTETOTJOUR2
                              ELSE 0
                          END
    		      +
                          CASE 
                              WHEN UTJ_ANNEE * 12 + UTJ_MOIS > 24132 AND
                           UTJ_ANNEE * 12 + UTJ_MOIS < 24136 AND
                              THEN UTJ_QTETOTJOUR1 + UTJ_QTETOTJOUR2
                              ELSE 0
                           END
                     ) UTJ_QTETOT
                FROM INVUTILISATIONJOUR 
                GROUP BY PRB_CODWRIN
            ) U
                   ON U.PRB_CODWRIN = B.PRB_CODWRIN
    WHERE B.PRB_DTEFFET <= '4/14/2011' AND
          (B.PRB_DTFINEFFET >= '4/14/2011' OR
          B.PRB_DTFINEFFET IS NULL) AND
          B.PRB_ACTIF = 'T' AND
          B.PRB_PERIODEINV <= 0 AND
          B.PRG_CODMRIN = G.PRG_COD AND
          G.PRB_CODCALCULCOUT = B2.PRB_CODWRIN AND
          G.PRG_RENDSTAT = 'T' AND
          B2.PRB_DTEFFET <= '4/14/2011' AND
          (B2.PRB_DTFINEFFET >= '4/14/2011' OR
          B2.PRB_DTFINEFFET IS NULL)
    GROUP BY B.PRG_CODMRIN
    ORDER BY 2,3,4,5

  4. #24
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut
    Désolé ça ne marche pas, l'erreur suivante apparait
    Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

  5. #25
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    oui, il faut l'ajouter dans le group by final !

    Code SQL : 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
    48
    49
    50
    51
    52
     
     
    SELECT cast(B.PRG_CODMRIN AS INTEGER) PRG_CODMRIN,
           MAX(B2.PRB_SEQUENCE) TRI_SEQUENCE,
           sum(I.INV_QTETOTUNITE * J.INV_PRIXUNITE)  PRIX_STOCK_INIT,
           sum(K.NST_STOCKOUV * J.INV_PRIXUNITE) PRIX_NST_STOCKOUV,
           sum(J.INV_QTETOTUNITE * J.INV_PRIXUNITE) PRIX_STOCK_FINAL,
           U.UTJ_QTETOT       
     
    FROM HISPRODBRUT B2,
         INVPRODGENERIQUE G,
         HISPRODBRUT B
         LEFT JOIN INVINVENTAIRE I ON (I.PRB_CODWRIN = B.PRB_CODWRIN AND
          I.CAL_DTACTIVITE = '11/30/2010')
         LEFT JOIN INVINVENTAIRE J ON (J.PRB_CODWRIN = B.PRB_CODWRIN AND
          J.CAL_DTACTIVITE = '4/14/2011')
         LEFT JOIN INVNIVEAUSTOCK K ON (K.PRB_CODWRIN = B.PRB_CODWRIN AND
          K.NST_ANNEE = 2010 AND K.NST_MOIS = 12)
          LEFT OUTER JOIN (
                SELECT 
                    PRB_CODWRIN,
                    SUM(
                         CASE 
                              WHEN UTJ_ANNEE = 2010 AND UTJ_MOIS = 12 
                              THEN UTJ_QTETOTJOUR1 + UTJ_QTETOTJOUR2
                              ELSE 0
                          END
    		      +
                          CASE 
                              WHEN UTJ_ANNEE * 12 + UTJ_MOIS > 24132 AND
                           UTJ_ANNEE * 12 + UTJ_MOIS < 24136 AND
                              THEN UTJ_QTETOTJOUR1 + UTJ_QTETOTJOUR2
                              ELSE 0
                           END
                     ) UTJ_QTETOT
                FROM INVUTILISATIONJOUR 
                GROUP BY PRB_CODWRIN
            ) U
                   ON U.PRB_CODWRIN = B.PRB_CODWRIN
    WHERE B.PRB_DTEFFET <= '4/14/2011' AND
          (B.PRB_DTFINEFFET >= '4/14/2011' OR
          B.PRB_DTFINEFFET IS NULL) AND
          B.PRB_ACTIF = 'T' AND
          B.PRB_PERIODEINV <= 0 AND
          B.PRG_CODMRIN = G.PRG_COD AND
          G.PRB_CODCALCULCOUT = B2.PRB_CODWRIN AND
          G.PRG_RENDSTAT = 'T' AND
          B2.PRB_DTEFFET <= '4/14/2011' AND
          (B2.PRB_DTFINEFFET >= '4/14/2011' OR
          B2.PRB_DTFINEFFET IS NULL)
    GROUP BY B.PRG_CODMRIN, U.UTJ_QTETOT 
    ORDER BY 2,3,4,5

  6. #26
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut
    c'est OK cette fois-ci !
    Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Pourcentage de champs NULL par enregistrement
    Par pprevel dans le forum Requêtes
    Réponses: 13
    Dernier message: 21/10/2014, 11h46
  2. Somme des champs d'un enregistrement
    Par Arbraz dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 04/11/2013, 17h55
  3. [AC-2007] créer des étiquettes avec un enregistrement par page
    Par crouic5 dans le forum Access
    Réponses: 2
    Dernier message: 28/03/2012, 16h30
  4. Réponses: 9
    Dernier message: 10/01/2006, 16h27
  5. Delphi7-DOA accéder au champ d'un enregistrement par indice
    Par delphim dans le forum Bases de données
    Réponses: 1
    Dernier message: 04/05/2005, 14h42

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