Calcul de pourcentage.

Signaler
Messages postés
30
Date d'inscription
jeudi 18 décembre 2008
Statut
Membre
Dernière intervention
2 novembre 2009
-
Messages postés
13
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
11 décembre 2011
-
Bonjour à tous,
voila, j'ai un problème avec une requète SQL, sur SQLServer.

J'ai une table TabReg(NomRegion, CAreg, Population) avec laquelle, j'aimerais calculer le pourcentage des ventes réalisé dans tel ou tel région sur le total des ventes.
Que le tout soit calculé et insérer dans une nouvelle colonne que je vais créer dan TabReg.

J'ai tester cela:
SELECT NomRegion,SUM(TabReg.CAreg) * 100 / Tot.CAreg
FROM TabReg ,  
 (SELECT SUM(CAreg)
   FROM  TabReg)AS Tot
 
GROUP BY TabReg.NomRegion





mais ça ne marche pas, il le dit qu'il n'y a aucune colonne de spécifier pour la colonne 1 de Tot ?!?

Puis j'ai tester ça:

SELECT NomRegion, 
       CAST((SELECT SUM(CAreg)
              FROM  TabReg  
              WHERE NomRegion = T.NomRegion) AS FLOAT) * 100.0 / CAreg
FROM   TabReg AS T
GROUP  BY NomRegion


Mais pas mieux, il me dit que T.CAreg n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.




Bref merci à ceux qui pourrons m'aider.

4 réponses

Messages postés
239
Date d'inscription
mercredi 19 février 2003
Statut
Membre
Dernière intervention
17 janvier 2013
5
Bonjour,

Si je comprends bien, cette requete se fait sur la même table.
Personnellement, je ferai comme suit:

select
NomRegion
,cast(sum(CAreg) as float) * 100.0 / float(CAreg as float) as Total
from TabReg
group by NomRegion, CAreg


Je pense que cela doit fonctionner.

a+

PascalCmoa
email: PascalCmoa
Messages postés
30
Date d'inscription
jeudi 18 décembre 2008
Statut
Membre
Dernière intervention
2 novembre 2009

Cela ne fonctionne pas.
Il me dit que float n'est pas un nom de fonction reconnu
Messages postés
30
Date d'inscription
jeudi 18 décembre 2008
Statut
Membre
Dernière intervention
2 novembre 2009

Bon c'est bon j'ai trouver la réponse, pour ceux que ça pourrais intéresser je mets la requête:

SELECT NomRegion,ROUND(SUM(TabReg.CAreg) * 100 / CAST((SELECT SUM(CAreg) FROM  TabReg)AS FLOAT),0)
FROM TabReg
GROUP BY TabReg.NomRegion


Voila, merci.
Messages postés
13
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
11 décembre 2011

bonjour,

concernant le message d'erreur sur la 1 ère requête
mais ça ne marche pas, il le dit qu'il n'y a aucune colonne de spécifier pour la colonne 1 de Tot ?!?


pour info : il est obligatoire de nommer les champs d'une sous requête, s'il ne s'agit pas directement du nom d'un champ de l'objet source.

ici, il faut nommer SUM(CAreg) :

SELECT NomRegion,SUM(TabReg.CAreg) * 100 / Tot.Tot_CAreg
FROM TabReg ,
(SELECT SUM(CAreg) AS Tot_CAreg
FROM TabReg)AS Tot

GROUP BY TabReg.NomRegion