Bonjour à toutes et à tous,
Je travaille actuellement sur une requête qui doit me permettre d'obtenir un pourcentage en divisant la colonne 'a' par la colonne 'b', cependant la colonne 'b' est issue d'un calcul (une formule Sum()).
Pour que ma requête puisse s'exécuter je dois introduire une instruction GROUP BY qui regroupe les résultats selon leur nomenclature. Le problème que je rencontre est le suivant :
La colonne 'b' ne me donne pas une somme mais la valeur de chaque opérande (toutes les valeurs qui sont sommées), par conséquence je n'obtiens pas un ratio comme je le souhaite mais le chiffre 1 (la valeur de la colonne 'a' et celle de la colonne 'b' sont identiques, donc la division de l'une par l'autre donne 1).
Pourriez-vous m'apporter une solution efficace pour résoudre ce problème, merci.
Voici le résultat obtenu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 SELECT { fn CONCAT(m.libelle_en, CAST(h.Annee AS varchar)) } AS Date, en.libelle_niveau_2 AS lib_en2, en.libelle_niveau_1 AS lib_en, en.id_niveau_1, (SELECT h2.Montant FROM headcount AS h2 INNER JOIN nomenclature_en AS en2 ON en2.Nomenclature = h2.Nomenclature WHERE (h2.Mois = h.Mois) AND (h2.Annee = h.Annee) AND (en2.id_niveau_1 = en.id_niveau_1) AND (h2.Nomenclature = h.Nomenclature)) / (SELECT SUM(h.Montant) AS sum FROM headcount AS h3 INNER JOIN nomenclature_en AS en3 ON en3.Nomenclature = h3.Nomenclature WHERE (h3.Mois = h.Mois) AND (h3.Annee = h.Annee) AND (en3.id_niveau_1 = en.id_niveau_1) AND (h3.Nomenclature = h.Nomenclature) GROUP BY h3.Annee, h3.Mois) AS div FROM headcount AS h INNER JOIN nomenclature_en AS en ON h.Nomenclature = en.Nomenclature INNER JOIN month_name AS m ON h.Mois = m.Numero WHERE (en.id_niveau_1 = 'DIV') AND (h.Annee = @minYear) AND (h.Mois >= @month) OR (en.id_niveau_1 = 'DIV') AND (h.Annee > @minYear) AND (h.Annee < @maxYear) OR (en.id_niveau_1 = 'DIV') AND (h.Annee = @maxYear) AND (h.Mois <= @month) GROUP BY h.Annee, h.Mois, en.libelle_niveau_1, m.libelle_en, en.libelle_niveau_2, h.Nomenclature, en.id_niveau_1 ORDER BY h.Annee, h.Mois
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Date lib_en2 lib_en id_niveau_1 div ------------------------------------------------------------------------- January 2003 Administration Division DIV 1 January 2003 Engineers Division DIV 1 January 2003 Administration Division DIV 1 January 2003 Administration Division DIV 1 January 2003 Administration Division DIV 1 January 2003 Service Division DIV 1 February 2003 Administration Division DIV 1 February 2003 Engineers Division DIV 1 February 2003 Administration Division DIV 1 February 2003 Administration Division DIV 1 February 2003 Administration Division DIV 1
Partager