Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/12/2011, 10h16   #1
Membre à l'essai
 
Inscription : mai 2008
Messages : 133
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 133
Points : 23
Points : 23
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 :
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
colonel.klink est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 10h28   #2
Expert Confirmé Sénior
 
Homme François
Chef de projet NTIC
Inscription : janvier 2007
Messages : 5 353
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : janvier 2007
Messages : 5 353
Points : 9 747
Points : 9 747
Code :
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.
__________________

Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


Une réponse vous a aidé ? utiliser le bouton

"L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel
Bluedeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 10h30   #3
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 470
Points : 2 470
Envoyer un message via Yahoo à zinzineti
Bonjour,

vous avez plusieurs méthodes ici selon la version de votre SQL SERVER
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 10h42   #4
Membre à l'essai
 
Inscription : mai 2008
Messages : 133
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 133
Points : 23
Points : 23
Merci pour vos réponses.

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

Par contre, en utilisant :
Code :
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 ...
colonel.klink est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 10h49   #5
Membre à l'essai
 
Inscription : mai 2008
Messages : 133
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 133
Points : 23
Points : 23
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
colonel.klink est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 10h59   #6
Membre Expert
 
Homme Etienne ZINZINDOHOUE
Ingénieur développement
Inscription : mars 2010
Messages : 1 139
Détails du profil
Informations personnelles :
Nom : Homme Etienne ZINZINDOHOUE
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur développement
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2010
Messages : 1 139
Points : 2 470
Points : 2 470
Envoyer un message via Yahoo à zinzineti
montre le message d'erreur et les types de chaque colonne pour chaque table
__________________
Etienne ZINZINDOHOUE
Billets-Articles
zinzineti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 12h29   #7
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
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 :
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 15h53   #8
Membre à l'essai
 
Inscription : mai 2008
Messages : 133
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 133
Points : 23
Points : 23
ok merci.

Je vais tout reprendre.
colonel.klink est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h27.


 
 
 
 
Partenaires

Hébergement Web