Bonjour à tous,
Je rencontre actuellement un soucis sur SQL SERVER, je souhaite à partir d'une table, sommer une colonne selon 2 conditions.
Exemple de table :
Numero_Contrat Code_Produit MontantCumul Mois Annee 1 Chaise 150 3 2014 1 Chaise 250 6 2014 1 Chaise 450 9 2014 1 Chaise 750 12 2014
Alors le but de ma question est de calculer le montant non cumulé de chaque contrat par trimestre.
Exemple du résultat souhaité:
Numero_Contrat Code_Produit Montant Mois Annee Trimestre 1 Chaise 150 3 2014 1 1 Chaise 100 6 2014 2
Dans mon développement j'hésite actuellement soit à séparer mes requêtes avec une requête par trimestre, soit avec un CASE WHEN mais on ne peut ajouter la condition WHERE (sauf erreur de ma part) dans un CASE WHEN. Et du fait que ma base ne comporte pas 4 lignes, mais plusieurs contrats et plusieurs années je souhaitais mettre une condition comme : WHEN Mois=6 then sum(Montantcumul)-sum(Montantcumul) where Mois=3 (Chose qui ne marche pas je vous l'accorde mais c'est pour expliquer )
Après ma 2ème solution serait de séparer en plusieurs sous requêtes, mais le problème est que je ne vois pas d'autres moyen mis à part de créer 4 colonnes (1 par trimestre) et de faire la différence classique du genre :
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 Select Numero_Contrat, Code_Produit, Montant=sum(Montant2T)-sum(Montant1T) from ( Select Numero_Contrat, Code_Produit, Montant1T=sum(MontantCumul) from table where Mois=3 union Select Numero_Contrat, Code_Produit, Montant2T=sum(MontantCumul) from table where Mois=6 ) as SSreqTrim
Voilà j’espère avoir été claire dans mes explications n’hésitez pas si vous voulez des compléments.La deuxième solution me parait fastidieuse à réaliser (du fait de la quantité des champs utilisés), car j'ai simplifié au max mon problème, mais en l'absence de conseils je m'y résoudrai
Auriez vous des conseils à me donner? Serait il possible de réaliser cette opération avec une fonction que je ne connaitrais pas?
Je vous remercie d'avance pour vos réponses !
Bon week-end !
Partager