Aggregation sur une ligne : best practice
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 :
Citation:
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
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.
De ce fait, je pensais faire qlq chose comme cela.
Code:
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