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 :

MAJ des valeurs d'une table


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
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut MAJ des valeurs d'une table
    Bonjour,

    J'utilise des tables temporaires pour réaliser quelques calculs.

    Dans ma dernière table j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  
    		Per AS MOY_Periode,
    		SUM(CASE WHEN NbRank=1 then Val else 0 end) AS Valeur, 
    		SUM(CASE WHEN NbRank=2 then Val else 0 end) AS Moyenne, 		
    		SUM(CASE WHEN NbRank=3 then Val else 0 end) AS Moy_basse, 	
    		SUM(CASE WHEN NbRank=4 then Val else 0 end) AS Moy_haute
    	FROM @Tmp 
    	GROUP BY Per
    J'aimerais, à partir de là, mettre 3 champs (Moyenne, Moyenne basse et moyenne haute) à jour dans une table physique.

    Quelle est la meilleure syntaxe pour réaliser cette MAJ ?

    Merci

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO theTable (Moyenne, Moy_Basse,Moy_haute)
    SELECT  
    		SUM(CASE WHEN NbRank=2 then Val else 0 end) AS Moyenne, 		
    		SUM(CASE WHEN NbRank=3 then Val else 0 end) AS Moy_basse, 	
    		SUM(CASE WHEN NbRank=4 then Val else 0 end) AS Moy_haute
    	FROM @Tmp 
    	GROUP BY Per
    Mais je suis très étonné par vos moyenns calculées avec SUM. Je m'interroge sur le contenu de la table Tmp.

  3. #3
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Etienne ZINZINDOHOUE
    Billets-Articles

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut
    Merci pour vos réponses.

    La méthode INSERT insert de nouvelle données, je veux juste mettre à jour.

    Par contre, en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	UPDATE RATIO SET	RATIO.RAT_MoyReseau = SUM(CASE WHEN NbRank=2 then Tmp.Val else 0 end),
    						RATIO.RAT_MoyBasse = SUM(CASE WHEN NbRank=3 then Tmp.Val else 0 end), 
    						RATIO.RAT_MoyHaute = SUM(CASE WHEN NbRank=4 then Tmp.Val else 0 end)
    			FROM @Tmp AS Tmp INNER JOIN RATIO ON Tmp.Per = RATIO.RAT_Periode
    J'ai un problème d'agrégat, ma syntaxe ne doit pas être correcte ...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 136
    Par défaut
    Pour info, ma table temporaire :

    MOY_Periode Valeur Moyenne Moy_basse Moy_haute
    2010/12 12035.00 12035.00 12035.00 12035.00
    2011/01 7613.00 7613.00 7613.00 7613.00
    2011/02 3495.00 3495.00 3495.00 3495.00
    2011/03 4598.00 4598.00 4598.00 4598.00
    2011/04 9652.00 9652.00 9652.00 9652.00
    2011/05 1245.00 1245.00 1245.00 1245.00
    2011/06 2136.00 2136.00 2136.00 2136.00
    2011/07 3214.00 3214.00 3214.00 3214.00
    2011/08 4523.00 4523.00 4523.00 4523.00
    2011/09 5896.00 5896.00 5896.00 5896.00
    2011/10 1523.00 4804.60 3007.67 6500.00
    2011/11 1500.00 3260.00 1433.33 4666.67

  6. #6
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    montre le message d'erreur et les types de chaque colonne pour chaque table
    Etienne ZINZINDOHOUE
    Billets-Articles

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Pourauoi tout ce micmac merdique avec des variables tables (et non des tables temporaires) ?
    C'est stupide car vous faites de la redondance de données donc vous encombrer le cache de données recopiées donc vous êtes contre performant.
    Toute votre salade peut être faite en une seule requête à l'aide d'une CTE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH T AS 
    (
    SELECT SUM(CASE WHEN NbRank=2 then Val else 0 end) AS Moyenne, 		
           SUM(CASE WHEN NbRank=3 then Val else 0 end) AS Moy_basse, 	
           SUM(CASE WHEN NbRank=4 then Val else 0 end) AS Moy_basse
    FROM   @Tmp 
    GROUP BY Per
    )
    UPDATE RATIO 
       SET RAT_MoyReseau = Moyenne,
           RAT_MoyBasse  = Moy_basse, 
           RAT_MoyHaute  = Moy_basse
    FROM T
    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/ * * * * *

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

Discussions similaires

  1. insérer des valeur dans une table via un formulaire
    Par horkets dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 18/07/2008, 20h47
  2. Réponses: 3
    Dernier message: 21/05/2007, 15h37
  3. [MySQL] Liste deroulante et inscription des valeurs dans une table
    Par stefon dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 24/11/2006, 15h31
  4. Macro - Ecrire des valeurs dans une table
    Par gojaru dans le forum Access
    Réponses: 2
    Dernier message: 17/08/2006, 13h54
  5. Réponses: 2
    Dernier message: 17/05/2006, 21h35

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