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 :

update + sum + group by


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2003
    Messages : 26
    Points : 23
    Points
    23
    Par défaut update + sum + group by
    bonjour, j'ai en fait 2 questions


    je voudrais stocker les sommes de ma variables rrc regroupées selon adh rng
    (je suis débutant en sql et je travaille sous SAS)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    update tempo
    set RRC_RGPT_BEN=(select sum(RRC) from T_generale group by ADH, RNG);
    erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERREUR: Sous-requête évaluée à plus d'une ligne.
    des idées ?

    ma 2ème question
    dans la meme idée que le code précédent, j'aimerai sommer directement dans la table mise à jour mais cela pose un problème d'acces à la base
    l'idée serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update T_generale
    set RRC_RGPT_BEN=(select sum(RRC) from T_generale group by ADH, RNG, REGPT_ACT)
    ;
    merci

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Bonjour.

    Pour la question 1, l'erreur me paraît assez parlante : tu essaies d'entrer plusieurs valeurs pour la même ligne pour un même champ... Ce qui n'est pas surprenant vu que tu regroupes ton aggrégat sur 2 champs, et que tu ne filtres pas le résultat.
    Quel(s) liens existent-ils entre tempo et T_generale ?

    Il faudrait quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE tempo tp
    SET RRC_RGPT_BEN=(SELECT sum(RRC)
                      FROM T_generale t_Gen 
                      WHERE tp.lien_T_Gen=t_Gen.lien_tp
                      GROUP BY ...);
    Tu saisis l'idée ?

    2ème question : déjà, tu auras le même problème que précédemment... Il faut que ta requête qui te retourne la nouvelle valeur pour ton champ ne retourne qu'une seule ligne par enregistrement de la table à mettre à jour.

    Quoi qu'il en soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (select sum(RRC) from T_generale group by ADH, RNG, REGPT_ACT)
    cette partie de la requête de mise à jour devrait prendre le contenu de T_generale avant le début de la mise à jour. Donc une telle requête est (il me semble) possible, mais elle ne prendra pas en compte les valeurs qu'elle met elle-même à jour (heu, tu me suis ? )

    Donc si ça te va, tant mieux, sinon, je ne vois pas d'autre solution qu'une procédure...

    Quoi qu'il en soit, il faut commencer par résoudre le 1er problème, afin voir comment faire un update valide.

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2003
    Messages : 26
    Points : 23
    Points
    23
    Par défaut
    Merci pour ta réponse
    j'ai suivi le raisonnement mais mon problème demeure car les lignes ne sont pas toujours différenciables entre elles et donc la clause where ne me permet pas de réduire la réponse à une seule ligne.

    je vais devoir contourner le problème avec des create table je pense c'est dommage ca va être long et moche

    au final ce que j'aurai souhaité en fait c'est remplir la colonne d'un coup et non pas case par case.

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Citation Envoyé par PhYx Voir le message
    j'ai suivi le raisonnement mais mon problème demeure car les lignes ne sont pas toujours différenciables entre elles et donc la clause where ne me permet pas de réduire la réponse à une seule ligne.
    Ha ben là j'avoue que j'ai du mal à te suivre
    Pour une ligne de ta table, tu peux avoir plusieurs valeurs pour un même champ ??!!
    Si oui, effectivement, c'est une autre table qu'il te faut.
    Si c'est juste que tu ne sais pas comment récupérer la valeur qu'il faut pour une ligne donnée, décris-nous ton schéma, peut-être qu'on pourra t'aider...

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2003
    Messages : 26
    Points : 23
    Points
    23
    Par défaut
    en fait certaines de mes lignes sont identiques mais c'est normal, il s'agit juste de transactions différentes avec la meme personne et au meme montant et il n'y a pas d'identifiant de transaction donc les lignes sont les memes.

    peut etre que je me trompe mais j'ai l'impression qu'avec ta méthode, la clause WHERE est ici pour faire un lien ligne par ligne, hors pour moi il est possible que ma variable sum(RRC) fournisse un résultat à rentrer sur plusieurs lignes, je pense que c'est ca qui bug (et je pense aussi que je ne suis pas claire )

    cependant j'ai pu régler mon problème avec du code SAS (que je maitrise mieux), je débute en sql et j'aurai aimé l'utiliser jusqu'au bout du programme mais à un moment le boulot doit avancer


    merci pour ton aide, je garde ce conseil ds un coin de ma tete, il pourrait m'être utile par la suite.

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Citation Envoyé par PhYx Voir le message
    il n'y a pas d'identifiant de transaction donc les lignes sont les memes.
    Ouch, c'est pas très bon ça...
    Mais pas insurmontable.

    Citation Envoyé par PhYx Voir le message
    la clause WHERE est ici pour faire un lien ligne par ligne
    Il faut surtout que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (SELECT sum(RRC) FROM ... WHERE ... GROUP BY ...)
    ne retourne qu'une seule ligne. Mais si ça retourne la même valeur pour plusieurs lignes de tempo, c'est pas un problème.
    J'imagine qu'il existe un lien entre tempo et T_Generale non ?

    Citation Envoyé par PhYx Voir le message
    merci pour ton aide, je garde ce conseil ds un coin de ma tete, il pourrait m'être utile par la suite.
    De rien. Si, par curiosité, tu veux une solution en SQL (si une solution existe bien...), n'hésite pas à poursuivre la discussion.

    A+

Discussions similaires

  1. Update + SUM + Group BY
    Par laure07 dans le forum Langage SQL
    Réponses: 24
    Dernier message: 21/10/2020, 18h39
  2. Réponses: 2
    Dernier message: 01/10/2010, 14h00
  3. requete sql deux fois sum groupe by
    Par DIDIDIDA dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/03/2008, 13h04
  4. Update + SUM() ?
    Par dark_vidor dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/01/2006, 22h51
  5. update avec group by
    Par slc dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/10/2004, 13h44

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