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

WinDev Discussion :

Mise a jour avec un sum ! [WD14]


Sujet :

WinDev

  1. #1
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2009
    Messages : 189
    Points : 61
    Points
    61
    Par défaut Mise a jour avec un sum !
    Bonjour a tous, voila j'ai un soucis pour mettre a jour une table, dans laquelle je dois lui rentrer les données d'une autre sur laquelle j'ai fais un sum. Je m'explique: ma 1ere table(TabDept) est comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    RHONE ALPES	01		118933.75                        
    PICARDIE	        02	        44547.24                
    AUVERGNE	        03	        38277.71                          
    PACA	                04	        15148.34                          	
    PACA	                05	        46356.77                       
    PACA	                06	        159410.74                         
    RHONE ALPES	07	        46281.97
    Avec dans la première colonne le nom de la région, la deuxième le N° de département et la troisième contient le CA du département.

    Et je veux arriver a ca dans ma deuxième table(TabReg):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    RHONE ALPES	        1186125.51	        6121000
    PICARDIE	                237121.24	        1899999
    AUVERGNE	                202159.9	        1341000
    PACA	                        742632.08	        4890996
    CHAMPAGNE ARDENNE	192310.15	        1778664
    Avec dans la première colonne le nom de la région, la deuxième le CA par région et la troisième contient la population de la région.


    Donc en résumer il faut que je fasse un sum sur TabDept et ensuite récupérer mes données pour faire un UPDATE de TabReg.
    J'ai penser a ça mais ça ne marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    UPDATE TabReg SET CAreg  = ( SELECT  NomRegion, sum(CADept) FROM TabDept group by NomRegion)
    Je vois pas trop quelqu'un peut il m'aider ??

  2. #2
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    UPDATE ? C'est pour modifier un champs ça non ? comment tu sais qu'il sera déjà créé ?

    Je n'y connais pas grand chose en SQL mais il me semble que vouloir fuisionner ta requete de lecture avec ta requete de mise a jour n'est pas une très bonne idée.

    Moi, j'aurais fait une boucle sur la requete de lecture dans laquelle j'aurais fais ma mise à jour soit par insert soit par update le cas échéant.
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  3. #3
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2009
    Messages : 189
    Points : 61
    Points
    61
    Par défaut
    UPDATE ? C'est pour modifier un champs ça non ? comment tu sais qu'il sera déjà créé ?
    En faite ma table aura déja les informations de rentrer a l'intérieur, et au cours de l'année je mettrai a jour ces donnée avec les nouveaux chiffres; d'où mon UPDATE.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Dans ce genre de situation, j'ai deux méthodes:
    Soit je vide la table avant d'y mettre les nouvelles données
    Soit j'indique à la base de mettre à jour les "doublons":
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Insert into MaTable(Champ1,Champ2) select Champ1,sum(champ2) from MonAutreTable update duplicates
    Mais je ne sais pas si la deuxième méthode est très "standard", c'est à dire conforme à la norme SQL.

    En tout état de cause, je ne le fait jamais sur l'intégralité de la table, mais uniquement sur ce qui a bougé.

    Tatayo.

  5. #5
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 953
    Points : 766
    Points
    766
    Par défaut
    Bonjour,

    Dans la mesure où tu possède toutes tes informations, j'aurais plutôt fait comme ceci (en gros)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT NomRegion, sum(CADept), sum(Population) FROM CADept, TabDept WHERE NomRegion(de la 1er table)=NonRegion(de la 2eme)
    GROUP BY NonRegion ORDER BY NonRegion
    Faut il pour cela que tu est un dénominateur commun entre les deux

    Raptor92
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  6. #6
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2009
    Messages : 189
    Points : 61
    Points
    61
    Par défaut
    Euh, Raptor, je vois pas trop ce que tu veux dire, mais si j'analyse a peu près je pense que ma requète doit correspondre a ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT NomRegion, sum(CADept) 
    FROM TabDept
    WHERE TabDept.NomRegion = TabReg.NomRegion
    GROUP BY NomRegion ORDER BY NomRegion
    Mais ça ne marche pas. Le problème vient de TabReg.NomRegion, qu'il ne reconnais pas apparament.

  7. #7
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 953
    Points : 766
    Points
    766
    Par défaut
    Si cela ne marche pas, alors vérifie déjà deux points

    1- Est ce que tes deux champs sont bien des ID
    2- Sont ils exactement identiques : type (exp: varchar) et en nombre de caractères.

    Exemple de requête que j'utilise régulièrement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ART_CODE, SUM(QTE_LIVREE) FROM ARTICLES, LGC_COMMANDES WHERE ART_CODE=LGC_ARTICLE..........
    Dans mon cas:

    ART_CODE et LGC_ARTICLE sont de type "Nvarchar(50)" et cela fonctionne nickel.

    Raptor92
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  8. #8
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2009
    Messages : 189
    Points : 61
    Points
    61
    Par défaut
    Je ne comprend pas trop le truc la.

    Ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT TabDept.NomRegion, sum(CADept) 
    FROM TabDept, TabReg
    WHERE TabDept.NomRegion = TabReg.NomRegion
    GROUP BY TabDept.NomRegion
    Fonctionne, il ne me trouve pas d'erreur, mais cela ne fait pas non plus ce que je veux.
    Cette requête indique qu'il faut qu'il selectionne le nom de la region, et qu'il fasse un calcul du CA, mais il n'est aucunement question de dupliquer le résultat dans ma table TabReg.
    Et c'est pour cela que au départ je vous disais qu'un update serais peut être le bien venu, non ?
    Bonne question.

  9. #9
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 953
    Points : 766
    Points
    766
    Par défaut
    Bonjour,

    Hum............
    Là, c'est moi qui est dû louper un truc.....
    Peut tu communiquer le descriptif de tes deux tables afin que je comprenne mieux
    Car, si dans la première tu possède le code région et le CA par région, je ne vois pas ce qui cloche.

    Dans ton cas, ce doit être différent, et les descriptifs devraient m'aider à comprendre

    Raptor92
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  10. #10
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2009
    Messages : 189
    Points : 61
    Points
    61
    Par défaut
    Ok, voici ce qu'il y a dans mes deux tables.

  11. #11
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 953
    Points : 766
    Points
    766
    Par défaut
    Auzur,

    Deux points me gène dans tes tables:

    1- Tu possèdes 2 champs identiques sur 2 tables différentes, mon humble expérience me dit que ce n'est pas bon pour SQL.

    Tu devrait plutôt intituler tes champs:

    TablDept = TD_NonRegion
    TabReg = TR_NonRegion

    De plus, de cette façon, ce sera plus simple pour toi de suivre en cas de problème.

    2- Dans le cas ou ces deux champs sont identiques, pourquoi ne pas les déclarer en ID tous les deux, pourquoi déclarer NumDept au lieu de TD_NonRegion, et là ta jointure sera nickel.

    Et de plus, en programmation, tu n'est pas obliger de mettre le nom de ta table devant le champ, plus simple et plus lisible

    Raptor92
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  12. #12
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2009
    Messages : 189
    Points : 61
    Points
    61
    Par défaut
    Alors pour les deux points, ce n'est pas un problème d'avoir deux champs identique sur deux tables différentes, et c'est donc pour cela que ça répond a ta deuxième questions, pour pas que la saisie soit ambigüe, il faut mettre le nom de la table devant le nom de la colonne pour différencier les deux.
    Sinon oui, je ne mets pas le nom des tables devant chaque colonne.
    Mais mon problème reste le même, a tu une idée ?

    Ah oui, j'oubliais, pour les histoires des ID, je doit mettre NumDept en ID sur TabDept, car c'est déjà un second fichier, que je met a jour avec un fichier qui ne contient que le NumDept et le CADept.
    Voili voilou.

  13. #13
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 953
    Points : 766
    Points
    766
    Par défaut
    Bon,
    Comme je possède une base de données test, je vais créer les deux tables et reviens vers toi un peut plus tard



    Raptor92
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  14. #14
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2009
    Messages : 189
    Points : 61
    Points
    61
    Par défaut
    Purée, ça m'agace, car je cherche sur google, mais je trouve même pas de solution. Que des gars qui ont eu le même problème mais pas de solutions...
    Bizarre bizarre.

  15. #15
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 953
    Points : 766
    Points
    766
    Par défaut
    Citation Envoyé par AUZUR Voir le message
    Purée, ça m'agace, car je cherche sur google, mais je trouve même pas de solution. Que des gars qui ont eu le même problème mais pas de solutions...
    Bizarre bizarre.
    Il ne faut jamais s'énerver devant un problème, il y a forcement une solution.....de la patience, il n'y a rien de mieux.

    Je suis sur un problème depuis 3 semaines, et je cherche encore le dernier détail qui me permettrais de faire fonctionner mon module....

    Raptor92
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  16. #16
    Membre chevronné
    Avatar de mogwai162
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 1 860
    Points
    1 860
    Par défaut
    Oui lol j'en sais quelque chose...

    Mais je me contenterai de refaire la même remarque : A ta place je ne ferais pas ça. Je me contenterais d'une boucle sur la lecture avec dedans des insert ou update.

    Mais c'est parce que je ne suis pas un pro d'SQL. juste de windev....
    Patrick Catella

    Je ne réponds pas aux messages privés si ceux ci suivent un sujet. Il est préférable pour tous de poursuivre la discussion dans le sujet d'origine.

    Je suis Concepteur développeur Windev (10 ans) et Windev mobile (4 ans) en recherche d'emploi. J'etudie toute proposition

  17. #17
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 953
    Points : 766
    Points
    766
    Par défaut
    Soyons fou..........

    Essaye ceci:

    SELECT TableDept.NomRegion, TableRegion.Nomregion, TableDept.CA, SUM(TableRegion) FROM TableRegion, TableDept WHERE TableDept.NomRegion = TableRegion.Nomregion GROUP BY TableDept.NomRegion, TableRegion.Nomregion, TableDept.CA ORDER BY TableRegion.Nomregion ASC


    Raptor92
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


  18. #18
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    189
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Mars 2009
    Messages : 189
    Points : 61
    Points
    61
    Par défaut
    Ola, ça fait peur dit donc !!

    Bon alors c'est la que je crois que l'on ce comprend pas très bien.
    Ton code ne fonctionne pas du moins il ne fait pas du tout ce que je veux.
    Le code pour faire le sum de CADept, il est fait, c'est celui la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT TabDept.NomRegion, SUM(CADept) 
    FROM TabReg, TabDept 
    WHERE TabDept.NomRegion = TabReg.Nomregion 
    GROUP BY TabDept.NomRegion, TabReg.Nomregion
    ORDER BY TabReg.Nomregion ASC
    Le problème est que lorsque je fais ça, il m'affiche ma colonne NomRegion, et une colonne avec le sum qui c'est effectuer pour chaque région.
    Le problème vient a partir de la maintenant, le sum est mis dans une colonne qui n'a pas de nom, alors que moi je veux que cette colonne mette a jour ma colonne CAreg dans TabReg.
    Un peu tordu et difficile a expliquer ce que je viens de dire.
    En espèrant que tu est compris.
    En clair cette requète affiche ce que je veux, mais ne mets pas a jour ma table TabReg.
    Dur, dur la culture !

  19. #19
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour
    le sum est mis dans une colonne qui n'a pas de nom
    Pour donner un nom à la colonne totalisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUM(CADept) AS TOTAL_CA
    Bien sur tu mets le nom que tu veux

  20. #20
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 953
    Points : 766
    Points
    766
    Par défaut
    Hello,

    En fait, Mogway162 t'a donné la quasi solution à ton problème.

    Tu dois d'abord faire un select de ce que tu recherche (et là tu a la solution), ensuite, en ayant déclaré ton champ que tu veux insérer dans ta deuxième table comme une variable, tu fait un UPDATE

    En gros comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Ta requête............
    Si SQLExec()
        Si SQLAvance()=0
            variable=SQLLitCol()
     
          UPDATE...................
     
          FIN
          FIN
    Bien entendu, tu dois déclarer ta requête et le champ que tu veux Updater comme variable

    Pour la requête: Requête est une chaîne
    Pour ta variable: Dans ton cas, je pense que c'est un entier
    Pour remplir les parenthèses, regarde dans l'aide Windev, c'est assez bien expliqué, sinon...........ben........reviens vers nous....

    Raptor92
    Raptor92
    Dominique
    Aucune aide par MP, utilisez le forum.

    Mon guide du débutant pour apprendre à programmer en Java - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java


+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/05/2010, 15h56
  2. mise a jour avec str_replace
    Par Invité dans le forum Débuter
    Réponses: 4
    Dernier message: 19/01/2010, 23h28
  3. mise a jour avec une requete croisee
    Par antoine dpt dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/09/2009, 13h55
  4. Mise A Jour Avec Des Dates Sous Access
    Par jo001 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/05/2007, 15h55
  5. [C#] Probleme de mise à jour avec un DetailsView
    Par zehle dans le forum ASP.NET
    Réponses: 1
    Dernier message: 08/07/2006, 17h40

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