Bonjour,
Je souhaite r�aliser un pivot de deux colonnes en SQL SERVER v.15, mais je n'y parviens pas. Enfin presque, j'ai trouv� des solutions, mais je n'aime pas la fa�on dont je l'ai cod�, je suis persuad� que l'on peut r�aliser cela bien mieux.
J'ai bien entendu chercher sur Internet, mais ne suis pas parvenu � trouver de r�ponse (ou alors, je ne suis pas dou�).
J'explique ma probl�matique :
J'ai la table suivante :
Aliment�e comme ceci :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7 create table TB ( PRODUIT CHAR(3) not null , ANNEE INT not null , QTE INT not null , COUT INT not null ) ;
Et je voudrais obtenir ceci :
Avec les instructions suivantes, je parviens � r�aliser le pivot d'une seule colonne mais s�par�ment :
En solution, je peux concat�ner QTE et COUT pour r�aliser le pivot et les d�concat�ner ensuite, �a fait le job, mais c'est pas terrible en qualit� de codage.
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
23 select PRODUIT , max( [2021] ) as QTE_ANNEE_1 , max( [2022] ) as QTE_ANNEE_2 , max( [2023] ) as QTE_ANNEE_3 from ( select PRODUIT , ANNEE , QTE , COUT from TB ) as DONNEES_SOURCES pivot ( max( QTE ) for ANNEE in ( [2021] , [2022] , [2023] ) ) as PIVOT_QTE group by PRODUIT ; select PRODUIT , max( [2021] ) as COUT_ANNEE_1 , max( [2022] ) as COUT_ANNEE_2 , max( [2023] ) as COUT_ANNEE_3 from ( select PRODUIT , ANNEE , QTE , COUT from TB ) as DONNEES_SOURCES pivot ( max( COUT ) for ANNEE in ( [2021] , [2022] , [2023] ) ) as PIVOT_COUT group by PRODUIT ;
J'ai aussi trouv� une solution en imbriquant le premier pivot en source du second comme ceci :
Mais je ne suis pas encore satisfait, J'aimerai r�aliser quelque chose qui ressemble � ceci :
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
23
24
25 select PRODUIT , max( COUT_ANNEE_1 ) as COUT_ANNEE_1 , max( COUT_ANNEE_2 ) as COUT_ANNEE_2 , max( COUT_ANNEE_3 ) as COUT_ANNEE_3 , max( [2021] ) as QTE_ANNEE_1 , max( [2022] ) as QTE_ANNEE_2 , max( [2023] ) as QTE_ANNEE_3 from ( select PRODUIT , ANNEE_2 , QTE , max( [2021] ) as COUT_ANNEE_1 , max( [2022] ) as COUT_ANNEE_2 , max( [2023] ) as COUT_ANNEE_3 from ( select PRODUIT , ANNEE as ANNEE_1 , ANNEE as ANNEE_2 , QTE , COUT from TB ) as DONNEES_SOURCES_1 pivot ( max( COUT ) for ANNEE_1 in ( [2021] , [2022] , [2023] ) ) as PIVOT_COUT group by PRODUIT , ANNEE_2 , QTE ) as DONNEES_SOURCES_2 pivot ( max( QTE ) for ANNEE_2 in ( [2021] , [2022] , [2023] ) ) as PIVOT_QTE group by PRODUIT ;
Bien entendu, �a ne fonctionne pas. Auriez-vous une id�e, SVP ?
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 select PRODUIT , max( PIVOT_QTE.[2021] ) as QTE_ANNEE_1 , max( PIVOT_QTE.[2022] ) as QTE_ANNEE_2 , max( PIVOT_QTE.[2023] ) as QTE_ANNEE_3 , max( PIVOT_COUT.[2021] ) as COUT_ANNEE_1 , max( PIVOT_COUT.[2022] ) as COUT_ANNEE_2 , max( PIVOT_COUT.[2023] ) as COUT_ANNEE_3 from ( select PRODUIT , ANNEE , QTE , COUT from TB ) as DONNEES_SOURCES pivot ( max( QTE ) for ANNEE in ( [2021] , [2022] , [2023] ) ) as PIVOT_QTE pivot ( max( COUT ) for ANNEE in ( [2021] , [2022] , [2023] ) ) as PIVOT_COUT group by PRODUIT ;
D'avance Merci de l'attention que vous porterez � ma demande.
Cordialement,
GiDu
Partager