Bonjour à tous,
J'ai besoin de transformer des lignes en colonnes, malheureusement en SQL... même si je sais que c'est pas géniale, je n'ai hélas, techniquement, pas d'autres choix...
Voici le modèle sur lequel je travail (simplifié)
une table contrat :
Il me faut pour un contrat, la somme correspondant au plan 1, au plan 2, et au plan 3 de la version 1, ainsi que cette meme valeurs pour la dernière version... le tout dans des colonnes propres à chaque donnée.id (pk)
version (incrémenté au fur et à mesur des mises à jours)
fl_cur_ver (un flag qui m'indique si je suis sur la dernière version)
plan (c'est là que mes données sont normalisées car j'ai 3 plans - 1, 2 et 3)
somme
De ce fait, je pensais faire qlq chose comme cela.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 select id, max(case when version = 1 and plan = 1 then somme else null end) as somme_plan1_ver1, ... max(case when fl_cur_ver = 1 and plan = 1 then somme else null end) as somme_plan1_lastVer, ... from contrat group by id ;
Est ce que ca vous parait être la bonne solution ? est ce que vous feriez les choses autrement ?
Je sais qu'il existe une fonction PIVOT, mais je ne pense pas que mon cas qui correspond plus à une aggrégation ait besoin que je mette cela en place, n'est ce pas ?
Pour info, les points de simplifications sont principalements le nombre de colonnes SOMME... j'ai plusieurs colonne à afficher de la sorte, à chaque fois sur les 2 versions (première et dernière), et les trois plans ...
Merci d'avance pour vos commentaires.
N'hésitez pas à demander si vous avez besoin de plus d'info.
Steven
Partager