Bonjour,

Je travaille sur SQL server et je souhaiterais automatiser une requête SQL. Mes données s'organisent de la sorte, j'ai un montant de capital sur 3 mois :

Contrat Date_deb Date_fin capital
A 2021-12-01 2022-02-28 1 000€
A 2022-03-01 2022-05-31 900€
A 2022-06-01 2022-08-31 800€
A 2022-09-01 2022-11-30 700€

Je voudrais découper ce capital pour avoir un montant par mois (capital/divisé par nombre de mois) :

Contrat Date_deb Date_fin capital Capital_012022 Capital_022022 Capital_112022 Capital_122022
A 2021-12-01 2022-02-28 1 000€ 333€ 333€ null null
A 2022-03-01 2022-05-31 900€ null null null null
A 2022-06-01 2022-08-31 800€ null null null null
A 2022-09-01 2022-11-30 700€ null null 233€ null

Au lieu d'avoir un 'case when' par mois, j'ai créé une requête en sql dynamic mais le résultat de cette requête m'affiche uniquement le mois de décembre :
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
declare @mois as int 
declare @sqla as nvarchar(4000)
declare @sqlb as nvarchar(4000)
declare @sqlc as nvarchar(4000)
SET @mois = 1
SET @sqla = 'select dcef.contrat, dcef.DATE_DEBUT, dcef.DATE_FIN, CAPITAL ,case when cast(''01-'
SET @sqlc = ' from dw_1.dbo.DW_CONTRAT_ECHEANCIER_FINANCIER dcef left join DW_CONTRAT dc on dc.CONTRATID = dcef.CONTRATID where dcef.CONTRATID = A'
	WHILE @mois < 13
	BEGIN
		SET @sqlb = @sqla +concat(convert(varchar,@mois),'-',convert(varchar,year(GETDATE()))) + ''' as date)>= dcef.DATE_DEBUT and 
cast(''01-'+concat(convert(varchar,@mois),'-',convert(varchar,year(GETDATE()))) + ''' as date)<= dcef.DATE_FIN  then 
                           round((dcef.capital/case dc.PERIODLOC when 12 then 1  
       							          when  4 then 3  
       								      when  2 then 6 
       									  when  1 then 12  
       					                  end),0)
                       end as Mois_' + convert(varchar,@mois) + convert(varchar, year(GETDATE())) + @sqlc
    SET @mois += 1
    END
EXECUTE sp_executesql @sqlb
Est-ce qu'il existe une solution pour avoir une colonne par mois ?

Merci de votre aide