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

Développement SQL Server Discussion :

Optimisation Update sur champs multiples


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 95
    Par défaut Optimisation Update sur champs multiples
    Bonjour,
    Je souhaiterais optimiser un update de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    update TablePrincipale
    set somme1=(select sum(montant1*produit)
    		FROM TableSecondaire
    		WHERE TablePrincipale.ID=TableSecondaire.ID
    	   )
    ,somme2=(select sum(montant2/produit)
    		FROM TableSecondaire
    		WHERE TablePrincipale.ID=TableSecondaire.ID
    	   )
    ,somme3=(select sum(montant1*produit)
    		FROM TableSecondaire
    		WHERE TablePrincipale.ID=TableSecondaire.ID
    	   )
    Comme vous le voyez, mes champs "somme1" et "somme3" sont calculés selon la même manière : je cherche donc à ne faire la sous requête qu'une seule fois. Je trouve comment faire sur oracle sur le net (syntaxe du genre update table set (somme1,somme3)=(select...) ) mais cette syntaxe n'est pas valable pour sql server.

    A noter : ma sous requête fait une jointure sur l'id de la table à mettre à jour : je ne pense donc pas pouvoir pré calculer la valeur de somme1 et somme 3 par avance

    Merci pour votre aide

  2. #2
    Membre éclairé
    Homme Profil pro
    SQL Server
    Inscrit en
    Juin 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : SQL Server
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2010
    Messages : 43
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE TablePrincipale
    Set somme1 = sum(ts.montant1*produit)
    , somme2 = sum(ts.montant2/produit)
    , somme3 = sum(ts.montant1*produit)
    FROM TablePrincipale  tp
    INNER JOIN TableSecondaire ts on ts.Id = tp.id

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 95
    Par défaut
    Merci pour ton aide.
    Je teste ça dès que possible

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 95
    Par défaut
    Sauf erreur de ma part (j'avais d'ailleurs déjà testé) celà ne marche pas à cause du "sum". Sql server me renvoit l'erreur "An aggregate may not appear in the set list ok un update statement"

    D'autres idées ?

  5. #5
    Membre éclairé
    Homme Profil pro
    SQL Server
    Inscrit en
    Juin 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : SQL Server
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2010
    Messages : 43
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE TablePrincipale
    SET somme1 = sum(ts.montant1*produit)
    , somme2 = sum(ts.montant2/produit)
    , somme3 = sum(ts.montant1*produit)
    FROM TablePrincipale  tp
    INNER JOIN TableSecondaire ts ON ts.Id = tp.id
    GROUP BY tp.id
    J'avais oublié que tu voulais un somme, donc il faut un group by

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 95
    Par défaut
    Tu es sur qu'on peut faire un group by dans un update ?
    Je viens d'essayer par acquis de consience et j'arrive pas à le plugger sans erreur

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

Discussions similaires

  1. Optimisation Update sur un champ blob
    Par bibi92 dans le forum SQL
    Réponses: 1
    Dernier message: 26/09/2008, 10h51
  2. Optimisation Update sur SQL SERVER 2000
    Par Hansen69 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/12/2007, 22h17
  3. [Update] sur champ vide
    Par userB dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/06/2007, 10h22
  4. [ORACLE 9i]Update sur champs avec contrainte
    Par gowser dans le forum SQL
    Réponses: 11
    Dernier message: 14/06/2007, 14h40
  5. Index full text sur champs multiples
    Par manu_71 dans le forum Outils
    Réponses: 6
    Dernier message: 22/02/2007, 00h41

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