Bonjour,
Je suis en train d'essayer de me dépatouiller avec la fonction PIVOT d'oracle, et j'avoue que le fonctionnement est un peu obscure pour moi...
J'essaye de réaliser un double pivot, mais je ne vois pas trop comment l'ecrire.
Je ne sais d'ailleur pas si c'est faisable avec la fonction PIVOT, et dans ce cas, je passerai sans doute par des fonctions simples d'aggregation, mais je voudrais votre avis si possible.
Voici un jeu de données :
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
21
22 create table table_test ( contrat integer, type varchar(2), plan integer, valeur integer, flag varchar(1) ); insert into table_test values (1 ,'FC' ,1 ,2 ,'Y'); insert into table_test values (1 ,'FC' ,2 ,99 ,'N'); insert into table_test values (1 ,'FC' ,3 ,29 ,'Y'); insert into table_test values (1 ,'NB' ,1 ,22 ,'N'); insert into table_test values (1 ,'NB' ,2 ,35 ,'Y'); insert into table_test values (1 ,'NB' ,3 ,35 ,'N'); insert into table_test values (2 ,'FC' ,1 ,4 ,'Y'); insert into table_test values (2 ,'FC' ,2 ,90 ,'Y'); insert into table_test values (2 ,'FC' ,3 ,73 ,'N'); insert into table_test values (2 ,'NB' ,1 ,19 ,'N'); insert into table_test values (2 ,'NB' ,2 ,41 ,'N'); insert into table_test values (2 ,'NB' ,3 ,57 ,'Y'); commit;
CONTRAT TYPE PLAN VALEUR FLAG 1 FC 1 2 Y 1 FC 2 99 N 1 FC 3 29 Y 1 NB 1 22 N 1 NB 2 35 Y 1 NB 3 35 N 2 FC 1 4 Y 2 FC 2 90 Y 2 FC 3 73 N 2 NB 1 19 N 2 NB 2 41 N 2 NB 3 57 Y
Je voudrais réaliser mon PIVOT à la fois sur le plan et sur le type...
mais j'ai l'impression que la fonction PIVOT ne prend qu'un axe à la fois.
Comment je peux faire pour avoir les deux ?
Le résultat devant être comme suit :
Contrat valeur_FC_1 valeur_FC_2 valeur_FC_3 valeur_NB_1 valeur_NB_2 valeur_NB_3 flag_FC_1 flag_FC_2 flag_FC_3 flag_NB_1 flag_NB_2 flag_NB_3 1 2 99 29 22 35 35 Y N Y N Y N 2 4 90 73 19 41 57 Y Y N N N Y
J'en suis là :
et j'arrive pas à "pivoter" d'avantage...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select * from ( select CONTRAT, TYPE, PLAN, VALEUR, FLAG from table_test ) pivot (max(VALEUR) as sum_VALEUR, max(FLAG) as max_flag for (PLAN) in ('1' as a,'2' as b,'3' as c) )
Vous pourriez me donner un coup de main, svp ?
Merci d'avance,
Steven
Partager