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 :
Est-ce qu'il existe une solution pour avoir une colonne par mois ?
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
Merci de votre aide
Partager