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

Oracle Discussion :

Mise à jour de colonne et cumul des quantités


Sujet :

Oracle

  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Par défaut Mise à jour de colonne et cumul des quantités
    Bonjour, j'implore votre aide pour une requête sql qui me fais tourner la tete il y'a pas mal de temps, j'ai une table cmd(ncmd, nart, qtit) je veux que quand elle trouve deux nart semblable elle m'additionne la leur qtit et voila la requete que j'ai fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    update cmd
     set qtit =( select e1.qtit, e2.qtit
                    from cmd e1 , cmd e2
                   where e1.nart=e2.nart
                          and e1.ncmd <> e2.ncmd);
    mais ca marche pas . quelqu'un a une idée?

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    C'est clair que ça va pas marcher :
    1 : 1 colonne = select de 2 valeurs !
    2 : Aucun lien entre la sous requête et la table updatée
    3 : Et si jamais il y a 3 lignes avec le même nart : Erreur Too_many_rows

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update cmd a
    set qtit = (select sum(b.qtit) from cmd b where b.nart = a.nart)
    WHERE nart IN (select nart from cmd GROUP BY nart having count(*) > 1)

  3. #3
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Par défaut
    je viens de faire quelque rectification et ca marche nickel un grand grand Merci a toi, bonne journée..

  4. #4
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Par défaut
    j'en fait un peu trop mais j'ai encore besoin de votre aide ,dans la même requête j'essaie de fusionner les lignes affecté (qui ont un nart commun) en une seule ligne, j'ai beau essayé de modifié la requête que tu m'a donnée mais en vain...une idée??

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Peux tu préciser ce que tu souhaites faire exactement, avec en plus un exemple de données avant et après, ce serait parfait.

  6. #6
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Par défaut
    Merci de m'avoir répondu..

    en premier temps j'ai une table cmd:

    select * from cmd;

    NCMD NART QTIT
    ----- ---------- ----------
    1 1 25
    1 3 20
    2 1 20
    3 1 40
    4 3 10

    après exécution de la requête précédente avec un tout petit changement j'ai ca:


    NCMD NART QTIT
    ----- ---------- ----------
    1 1 85
    2 1 85
    3 1 85
    4 3 10

    alors que moi je veux ce résultat :
    NCMD NART QTIT
    ----- ---------- ----------
    1 1 85
    2 3 10

    Merci de bien m'aider car je suis vraiment a court d'idée..

  7. #7
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Et la ligne 1 3 20 ?

    C'est pas ceci que tu veux ?
    1 1 85
    2 3 30

    Parce que cette requête est assez facile à faire
    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
    WITH cmd AS (
    SELECT 1 ncmd, 1 nart, 25 qtit FROM DUAL UNION ALL
    SELECT 1 ncmd, 3 nart, 20 qtit FROM DUAL UNION ALL
    SELECT 2 ncmd, 1 nart, 20 qtit FROM DUAL UNION ALL
    SELECT 3 ncmd, 1 nart, 40 qtit FROM DUAL UNION ALL
    SELECT 4 ncmd, 3 nart, 10 qtit FROM DUAL)
    SELECT ROWNUM ncmd, nart, qtit 
    FROM (
          SELECT nart, SUM(qtit) qtit
          FROM cmd
          GROUP BY nart
          )
     
     
    NCMD	NART	QTIT
    1	1	85
    2	3	30
    Si le but est de remplacer la table par les nouvelles valeurs, le plus simple est d'insérer le résultat dans une table temporaire, vider la table cmd et la reremplir avec les données de la table temporaire (bien sur il ne faut pas que quelqu'un modifie cmd pendant ce temps).

  8. #8
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Par défaut
    Effectivement c'est ce que j'ai fait, en créons un autre table et en utilisant la dernière partie de ta requête (c'est un peu embêtant d'entrer les valeur a chaque fois). mon problème est résolu maintenant . Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 15/05/2009, 20h53
  2. Réponses: 3
    Dernier message: 23/02/2009, 18h04
  3. boucle vba et mise à jour de colonne
    Par jrege75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/12/2008, 23h18
  4. [RegEx] Mise à jour d'un fichier à partir des données d'un tableau
    Par saramery dans le forum Langage
    Réponses: 21
    Dernier message: 03/11/2008, 23h58
  5. [Excel] Mise à jour par colonnes
    Par Kamo76 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/12/2006, 16h34

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