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

Requêtes et SQL. Discussion :

Requête Update complexe


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Points : 52
    Points
    52
    Par défaut Requête Update complexe
    Bonjour je souhaite faire une requête de mise à jour sur une table et je rencontre un problème :

    J'ai une table LigneTableau avec pour clé primaire composée TabCode ( Clé primaire de la table TableauAmort ) et LigNum.

    Je souhaites mettre dans mon champ LigCap la valeur ( de la même ligne ) de LigEch pour la dernière ligne de chaque TabCode de la table LigneTableau.

    ////////////////////////////////////////////////////////////////////////////

    Petit exemple pour mieux comprendre :
    Je vx mettre la valeur de LigEch dans LigCap

    TabCode // LigNum // LigCap // LigEch
    1-0 // 1 // 1000 // 1000
    1-0 // 2 // 5000 // 3000
    1-0 // 3 // 0 // 2 <== La valeur 2 doit aller dans la 3eme colonne à la place de 0
    1-1 // 1 // 2000 // 1500
    1-1 // 2 // 0 // 5 <== La valeur 5 doit aller dans la 3eme colonne à la place de 0
    2-0 // 1 // 10 // 200 <== La valeur 200 doit aller dans la 3eme colonne à la place de 10
    3-0 // 1 // 4000 // 200 etc ...

    ////////////////////////////////////////////////////////////////////////////

    Pour l'instant j'ai fait la requête suivante, mais je m'apercoit qu'elle ne marche pas tout le temps, et je n'arrive pas a voir ce qui cloche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Update LigneTableau SET LigCapital = LigEch Where TabCode IN 
    ( Select TabCode From LigneTableau Where TabCode IN (Select TabCode 
    From TableauAmort) GROUP BY TabCode) AND LigNum IN 
    (Select MAX( LigNum) AS LigNumMax From LigneTableau 
    Where TabCode IN (Select TabCode From TableauAmort) 
    GROUP BY TabCode)

    Merci d'avance pour votre aide. Si vous avez besoin de plus d'explications n'hésitez pas !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    352
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 352
    Points : 415
    Points
    415
    Par défaut
    je ne comprend pas pourquoi tu fais des group by alors que tu fais un select d'un seul champ... Soit tu utilise le distinct, soit tu fais juste ton select et peu importe si tu as des doublons vu que tu utilise la clause IN. De plus je pense que tu as un where en trop (Where TabCode IN
    ( Select TabCode From LigneTableau ..)) : a quoi te sert cette clause vu que tu es déjà dans LigneTableau. Par conséquent ta première clause where sera toujours vrai...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UPDATE LigneTableau SET LigneTableau.LigCapital = [LigneTableau].[ligEch]
    WHERE (((LigneTableau.LigneNum)=(select max(ligneNum) from LigneTableau t1
    where TabCode = LigneTableau.TabCode)) 
    AND ((LigneTableau.TabCode) In (select tabcode from TableauAmort)));

  3. #3
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 804
    Points : 34 074
    Points
    34 074
    Billets dans le blog
    14
    Par défaut
    Quelle est la dernière ligne de chaque TabCode ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TabCode, MAX(LigNum) AS LigneMax
    FROM LigneTableau
    GROUP BY TabCode
    On réutilise la requête pour mettre à jour cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UPDATE LigneTableau AS LT1
    SET LigCap = LigEch
    WHERE (TabCode & '#' & LigNum) IN (
      SELECT TabCode & '#' & LigneMax
      FROM (
        SELECT TabCode, MAX(LigNum) AS LigneMax
        FROM LigneTableau
        GROUP BY TabCode
      ) tmp
    )
    Pas sûr qu'Access accepte ça sans broncher mais c'est l'idée.
    Sinon il faut enregistrer la première requête et y faire appel directement dans la seconde.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Points : 52
    Points
    52
    Par défaut
    Merci CinePhil mais la requête de Taoueret viens d'être testé et approuvée =)

    Merci à vous 2 pour vos réponses, ca m'aide beaucoup!

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

Discussions similaires

  1. Requête update à partir d'une autre table
    Par amiral thrawn dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/02/2024, 12h40
  2. [VB.NET] [ODBC] Pb requête UPDATE avec clé primaire..?
    Par Pleymo dans le forum Windows Forms
    Réponses: 7
    Dernier message: 09/03/2005, 19h46
  3. requête update qui marche pas
    Par MrsFrizz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/12/2004, 09h16
  4. Requête SQL complexe. Comment faire ....
    Par BilTCD dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/11/2004, 17h18
  5. PB Requête update
    Par cassi2 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 25/10/2004, 15h15

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