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 :

GROUP BY et HAVING dans un UPDATE


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Par défaut [Résolu] GROUP BY et HAVING dans un UPDATE
    Bonjour

    Voici une petite colle.

    j'ai deux table A et B comme suite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TABLE A
    (ID_A int,     -- identifiant unique de A
    VAL_A int,
    DATE_A datetime)
     
    CREATE TABLE B
    (ID_B int,     -- identifiant unique de B
    ID_A int,
    VAL_B int,
    DATE_B datetime)
    mon soucis est que dans VAL_A et DATE_A, je veux mettre respectivement VAL_B et DATE_B lorsque nous avons le MAX(VAL_B) pour un même ID_A.

    J'ai essayé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE A
    SET A.VAL_A=B.VAL_B, A.DATE_A=B.DATE_B
    FROM A inner join B on A.ID_A=B.ID_A
    GROUP BY B.ID_A
    HAVING B.VAL_B=MAX(B.VAL_B)
    Si je remplace l'UPDATE par un SELECT pour tester, cela fonctionne bien. Mais des que je mets UPDATE, j'ai une "Incorrect Syntax near 'GROUP BY'".
    J'ai l'impression que GROUP BY et HAVING ne vont pas bien avec UPDATE.

    Alors si quelqu'un peut m'éclairer là-dessus.

    NB : je travaille sous Sybase.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    et comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE A
    SET    A.VAL_A=B2.VAL_B, 
           A.DATE_A=B2.DATE_B
    FROM   A   
           INNER JOIN (SELECT ID_A
                       FROM   B
                       WHERE  A.ID_A=B.ID_A
                       GROUP  BY B.ID_A
                       HAVING B.VAL_B = MAX(B.VAL_B)) B2
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre expérimenté
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Par défaut
    C'est ce que j'espérait faire mais la version de Sybase ne permet pas les FROM (SELECT...)

  4. #4
    Membre expérimenté
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Par défaut
    Je crois que je n'ai pas le choix, je vais faire en deux étapes.

    Merci SQLPro pour la réponse.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/10/2013, 12h09
  2. UPDATE avec Jointure, clause GROUP BY et HAVING
    Par bilbot dans le forum Développement
    Réponses: 3
    Dernier message: 19/01/2012, 14h12
  3. comment traduire un "group by/having" dans une query
    Par cau83 dans le forum Alimentation
    Réponses: 1
    Dernier message: 05/06/2007, 09h05
  4. REPLACE dans un UPDATE
    Par outdial dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/09/2004, 11h00
  5. Une ch'tite bizarrerie dans les Updates de SQL Server
    Par Wakko2k dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 08/04/2004, 14h14

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