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 :

mise à jour de table avec somme


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 22
    Points : 15
    Points
    15
    Par défaut mise à jour de table avec somme
    Bonjour à tous,
    j'ai une table vide de chef de departement de vente et j'ai un champ par semaine durant 8 semaines. J'aimerais qu'à chaque nouvelle semaine la somme de toutes les ventes faites par les vendeurs (donc les subalternes de chaque chef) soit comptabilisée dans la table vide. Par exemple,

    table vide T1

    chef semaine1 semaine2 ...
    pierre
    paul
    claude

    table VEP pour la semaine1

    chef vendeur vente_produitabc
    pierre karl 12
    pierre julie 25
    pierre martin 30
    paul guy 20
    paul steve 12
    claude fred 23
    claude bobo 8

    apres requete
    table vendeur T1

    chef semaine1 semaine2 ...
    pierre 67
    paul 32
    claude 31

    J'ai tenté une requete SQL sans succès. Voici le code :
    UPDATE resultat_chef
    SET resultat_chef.semaine1=Semaine_1.Semaine1
    where exist
    (SELECT Semaine_1.NOM_CHEF_SECT, Sum(Semaine_1.Volume_activation_VEP) AS Semaine1
    FROM Semaine_1
    GROUP BY Semaine_1.NOM_CHEF_SECT);


    merci et j'attends avec impatience vos précieux conseils!!!!

    JS

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    J'ai du mal à comprendre la logique de votre requête où les noms de vos colonnes
    Ceci dit, j'ai testé rapidement sous Oracle 10g la requête suivante qui donne le résultat que vous semblez attendre.
    Attention : cette syntaxe est non conforme vis-à-vis de la norme SQL :
    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
    10g CYRIL> select *
      2  from dvp1;
     
             X          Y
    ---------- ----------
             1
     
    1 ligne sélectionnée.
     
    10g CYRIL> select *
      2  from dvp2;
     
             Y          Z
    ---------- ----------
             1         10
             1         22
     
    2 ligne(s) sélectionnée(s).
     
    10g CYRIL> update dvp1
      2  set y = (
      3     select sum(z)
      4     from dvp2
      5*    where dvp1.x = dvp2.y );
     
    10g CYRIL> select *
      2  from dvp2;
     
             Y          Z
    ---------- ----------
             1         10
             1         22
     
    2 ligne(s) sélectionnée(s).
     
    10g CYRIL> select *
      2  from dvp1;
     
             X          Y
    ---------- ----------
             1         32
     
    1 ligne sélectionnée.

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut Révision BDD
    Bonjour,

    D'après ce que je comprends, je suppose que le nom du chef est déjà alimenté dans les lignes de la table T1 ?
    Puisqu'il y a une table VEP par semaine, et 8 semaines dans la table T1, il faut donc faire 8 updates successifs puisque les données se trouvent dans 8 tables différentes.

    UPDATE T1 a SET a.MT_VENTE_SEM01 =
    ( Select SUM(b.MT_VENTE) FROM VEP_SEM01 b
    WHERE b.NOM_CHEF = a.NOM_CHEF
    AND b.NUM_SEM = a.NUM_SEM01
    GROUP BY b.NOM_CHEF )

    puis,

    UPDATE T1 a SET a.MT_VENTE_SEM02 =
    ( Select SUM(b.MT_VENTE) FROM VEP_SEM02 b
    WHERE b.NOM_CHEF = a.NOM_CHEF
    AND b.NUM_SEM = a.NUM_SEM01
    GROUP BY b.NOM_CHEF )

    et ainsi de suite pour les semaines restantes.

    Cependant, tout comme Magnus, j'au du mal à bien comprendre l'organisation et la structure de ta base de données, j'ai l'impression qu'elle n'est pas bien ficelée.

    Je mettrais le n° de semaine de la table T1 en ligne au lieu d'en mettre 8 en colonne, et ceci d'autant plus que ça me débarrasse de la gestion de ces 8 semaines fixes et figées en colonnes, ces dernières étant toujours lourdes à gérer avec SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    NOM_CHEF    NUM_SEM    MT_VENTE
    PIERRE     01    67
    PAUL     01    32
    CLAUDE        01    31
     
    PIERRE     02    70
    PAUL     02    28
    CLAUDE        02    10

    Ensuite, au lieu d'avoir une table VEP par semaine, il serait préférable que cette table contienne également la colonne "n° de semaine" de façon à pouvoir conserver les résultats heddomadaires de chaque vendeur semaine par semaine et faciliter le cumul subséquent dans la table T1 :



    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
     
    NOM_CHEF    NOM_VENDEUR    NUM_SEM    MT_VENTE
    PIERRE     KARL      01    12
    PIERRE        JULIE       01    25
    PIERRE        MARTIN    01    30
     
    PAUL     GUY      01    20
    PAUL          STEVE    01    21
     
    CLAUDE        FRED      01    23
    CLAUDE        BOBO    01    8
     
    PIERRE     KARL      02    15
    PIERRE        JULIE       02    25
    PIERRE        MARTIN    02    30
     
    PAUL     GUY      02          28 
    PAUL          STEVE       02    0
     
    CLAUDE        FRED      02    0
    CLAUDE        BOBO    02    10
    La mise à jour de la table T1 devient alors basique. En effet, il suffit de vider ou mettre à jour la table T1, puis de cumuler les montants des ventes par nom de chef pour obtenir le résultat escompté en une seule instruction INSERT :

    INSERT INTO T1 a
    ( SELECT NOM_CHEF, NUM-SEM, SUM(MT_VENTE) FROM VEP GROUP BY NOM_CHEF, NUM-SEM )

    Désolé pour la présentation, mais je n'arrive pas à faire correctement la mise en page du code avec la police proportionnelle dont nous disposons ici.

  4. #4
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    merci mercure le tout me semble très logique!! Je l'essaie dès maintenant. Par contre, le problème reste avec mes tables VEP qui proviennent d'une autre entité de l'entreprise et ils ne peuvent faire qu'une seule table VEP, ils doivent y aller hebdomadairement. Donc, je crois que je devrais creer un nouveau champ no_semaine pour chaque fichier que je receverai. Qu'en pensez-vous??

    merci,

    JS

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut Table VEP
    S'il est indispensable de maintenir une table VEP pour chaque vendeur, je ne toucherais pas à cette table et j'en créerais une nouvelle qui contiendrait le n° de semaine en supplément. je baptiserais ma table "Historique des ventes par vendeur et par semaine".
    Ensuite, je réceptionnerais la table VEP de chaque vendeur chaque semaine et me chargerais d'insérer dans cet historique les enregistrements qui figurent dans les tables VEP vendeur en y insérant le "bon" n° de semaine :

    INSERT INTO NEWVEP (NOM_CHEF, NOM_VENDEUR, NUM_SEM, MT_VENTE) VALUES(SELECT NOM_CHEF, NOM_VENDEUR, N°Semaine, MT_VENTE FROM VEP)

    Après, pour faire le cumul par vendeur et/ou par chef et/ou par semaine, c'est gâteau !

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    désolé du retard, j'étais pris sur un autre projet. Cela dit, je veux sélectionner que quelques chefs. J'ai donc essayé
    INSERT INTO T1 a
    ( SELECT NOM_CHEF, NUM-SEM, SUM(MT_VENTE)
    WHERE NOM_CHEF like
    '*Paul*'
    or '*Pierre*'
    FROM VEP GROUP BY NOM_CHEF, NUM-SEM )
    Et on me renvoit tout les chefs... Il ne faut pas oublier que je fais mon SQL dans Access (c surement la cause!!)

    JS

  7. #7
    Membre confirmé Avatar de lper
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    398
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 398
    Points : 641
    Points
    641
    Par défaut
    Citation Envoyé par dirtyjs
    désolé du retard, j'étais pris sur un autre projet. Cela dit, je veux sélectionner que quelques chefs. J'ai donc essayé
    INSERT INTO T1 a
    ( SELECT NOM_CHEF, NUM-SEM, SUM(MT_VENTE)
    WHERE NOM_CHEF like
    '*Paul*'
    or '*Pierre*'
    FROM VEP GROUP BY NOM_CHEF, NUM-SEM )
    Et on me renvoit tout les chefs... Il ne faut pas oublier que je fais mon SQL dans Access (c surement la cause!!)

    JS
    Bizarre cette syntaxe ! Le SELECT avant le FROM, le like avec un or directement
    (je comprend mieux le choix de ton pseudo )

Discussions similaires

  1. Mise à jours des tables avec un dump
    Par The Bronx 05 dans le forum Import/Export
    Réponses: 2
    Dernier message: 15/07/2012, 12h41
  2. mise a jours 1 table avec 2 table
    Par Commandeur dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/12/2009, 13h55
  3. mise à jour de table avec jointure
    Par NorexaMS dans le forum Bases de données
    Réponses: 8
    Dernier message: 09/03/2009, 14h09
  4. Mise à jour liens tables Access attachées avec Delphi
    Par Nicoclem dans le forum Bases de données
    Réponses: 5
    Dernier message: 11/02/2009, 23h07
  5. Mise à jour de table impossible après requête avec jointure
    Par sto dans le forum Bases de données
    Réponses: 5
    Dernier message: 17/03/2004, 13h24

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