Bonjour,
Je viens de découvrir les fonctions analytiques sous Oracle et il y quelque chose que je n'arrive pas à faire dans une requête.
J'ai une table avec des articles, des quantité et une période.
Je peux avoir plusieurs lignes par articles avec des quantités différentes , sur une période différentes. (Les périodes sont définies par des numéro)
Dans un premier temps j'ai récupéré la somme des quantités par articles.
Voici la requête et le résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 select artsvstt as Art,sum(qtfsvstt+qgfsvstt) As Qte from svstt where capsvstt in (select numoecap from oecap where etsoecap = '20' and typoecap = 'M' and to_char(to_date(dtdoecap,'YYYYMMDD'),'YYYYMM') >= to_char(ADD_MONTHS(TO_DATE(to_char(sysdate,'YYYYMMDD'), 'YYYYMMDD'), -12), 'YYYYMM') and to_char(to_date(dtfoecap,'YYYYMMDD'),'YYYYMM') <= to_char(ADD_MONTHS(TO_DATE(to_char(sysdate,'YYYYMMDD'), 'YYYYMMDD'), -1), 'YYYYMM')) and tcasvstt = 'M' and typsvstt = 'F' and artsvstt in ('768672','768682','768683','768696','770627','813196','851678','851679','851682','851771','854670','855010','856112','856312','870632','870633') group by artsvstt order by 2 DESCGrâce au fonction analytique je réussi à récupérer le pourcentage des quantités par article par rapport au total des quantités.
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 ART QTE 813196 12438 870632 10618 768696 4447 870633 3896 854670 3349 768672 3299 770627 2621 768682 2511 851678 2079 851679 1302 768683 1184 851682 1060 851771 253 855010 93 856112 31 856312 -1
Voici la requête et le résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 select distinct artsvstt as Art,sum(qtfsvstt+qgfsvstt) OVER (partition by artsvstt) As Qte, round((sum(qtfsvstt+qgfsvstt) OVER (partition by artsvstt order by artsvstt) / sum(qtfsvstt+qgfsvstt) OVER ()) *100,2) as Pourc from svstt where capsvstt in (select numoecap from oecap where etsoecap = '20' and typoecap = 'M' and to_char(to_date(dtdoecap,'YYYYMMDD'),'YYYYMM') >= to_char(ADD_MONTHS(TO_DATE(to_char(sysdate,'YYYYMMDD'), 'YYYYMMDD'), -12), 'YYYYMM') and to_char(to_date(dtfoecap,'YYYYMMDD'),'YYYYMM') <= to_char(ADD_MONTHS(TO_DATE(to_char(sysdate,'YYYYMMDD'), 'YYYYMMDD'), -1), 'YYYYMM')) and tcasvstt = 'M' and typsvstt = 'F' and artsvstt in ('768672','768682','768683','768696','770627','813196','851678','851679','851682','851771','854670','855010','856112','856312','870632','870633') order by 3 DESCPour finir voici mon problème.
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 ART QTE POURCENT 813196 12438 25,29 870632 10618 21,59 768696 4447 9,04 870633 3896 7,92 854670 3349 6,81 768672 3299 6,71 770627 2621 5,33 768682 2511 5,11 851678 2079 4,23 851679 1302 2,65 768683 1184 2,41 851682 1060 2,16 851771 253 0,51 855010 93 0,19 856112 31 0,06 856312 -1 0
Je souhaiterais rajoutais une colonne qui me fasse le cumul de ce pourcentage ligne après ligne.
Pour avoir un résultat comme ceci:
Je n'arrive pas à le faire via les fonctions analytiques car de ce que je comprend je ne peux utiliser une fonction analytique dans une fonction analytique. (les imbriqués en quelque sorte)
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 ART QTE POURCENT CUMUL 813196 12438 25.29 25.29 870632 10618 21.59 46.88 768696 4447 9.04 55.92 870633 3896 7.92 63.84 854670 3349 6.81 70.65 768672 3299 6.71 77.36 770627 2621 5.33 82.69 768682 2511 5.11 87.8 851678 2079 4.23 92.03 851679 1302 2.65 94.68 768683 1184 2.41 97.09 851682 1060 2.16 99.25 851771 253 0.51 99.76 855010 93 0.19 99.95 856112 31 0.06 100.01 856312 -1 0 100.01
Est ce que vous sauriez comment je peux faire pour avoir ce cumul des pourcentages?
Merci d'avance
Partager