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 :

Update + SUM + Group BY


Sujet :

Langage SQL

  1. #21
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    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 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par tomlev Voir le message
    S... c'est juste qu'on ne peut pas faire de jointure dans un UPDATE (ni avec SQL Server ni avec aucun autre SGBD il me semble...)
    A la vous vous trompez lourdement. On peut tout à fait, mais il faut que le SGBDR supporte le row value constructor.
    Dans ce cas la commande est du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE <Matable>
    SET    MaColonne = x.MaValeur
    WHERE  (col1, Col2, Col3, ... ) = SELECT col1, Col2, Col3 ...
                                      FROM   UneAutreTable AS x
    Bref, pour apprendre le SQL, mon site web comme mon ouvrage peut vous y aider !

    A +
    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/ * * * * *

  2. #22
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE TableA
    SET ValeurTotat = (SELECT sum(TA.valeur)
    FROM TableA TA
    WHERE TA.ID = TableA.ID
    AND TA.Année = TableA.Année
    AND TA.Année = 2004)
    est très coûteuse niveau temps !! si vous faites un explain avant pour voir le plan d'action : c'est Horrible !!
    je travail sur une table de 12 millions de ligne sur le SGBD PostgreSql ! et ça prend plus que 3 heures pour faire la mise a jour d'un seul champs tout en sachant que les autres champs utilisé sont indexés !!

    Donc y a t il une autre solution ou est ce que c'est la seule ?

    Merci

  3. #23
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    oui, il y une autre solution, plusieurs même :

    par exemple celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    WITH CTE AS (
        SELECT Valeur
            ,SUM(Valeur) OVER(PARTITION BY ID, Annee) AS Tot
        FROM TableA
    )
    UPDATE CTE 
        SET Valeur = Tot
    A adapter...

  4. #24
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    ok

    Merci, je vais le tester

  5. #25
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par laure07 Voir le message
    j'utilise SQL Server 2008 : donc effectivement n'accepte d'alias sur la table mise à jour, et donc j'ai mis l'alias dans le Select :
    L'instruction Update accepte les alias depuis au moins la version 2005 sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE T1 Set X=1
    FROM Table_Name T1
    Quant à la mise à jour avec la somme d'une valeur d'une autre table avec jointure, il suffit de faire un outer apply du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE T1 Set X=ISNULL(SUMVAL, 0)
    FROM TableName T1
    OUTER APPLY (SELECT SUM(VALEUR) AS SUMVAL FROM TableName T2 WHERE T1.KEY=T2.KEY) OA1

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/10/2010, 14h00
  2. update + sum + group by
    Par PhYx dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/06/2008, 15h44
  3. requete sql deux fois sum groupe by
    Par DIDIDIDA dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/03/2008, 13h04
  4. Update + SUM() ?
    Par dark_vidor dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/01/2006, 22h51
  5. update avec group by
    Par slc dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/10/2004, 13h44

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