Merci d'avance pour toute aide sur celui-ci. Disons que j'ai une requête qui compare les données d'une année à l'autre, en commençant par une année arbitraire et sans fin (à l'avenir), pour la même période chaque année jusqu'au dernier mois terminé (qui a pour caractéristique que les données Jan. ne montre jamais avant le 1er février). Dites aussi, que l'on ne peut pas utiliser T-SQL. Existe-t-il un moyen de reformuler la requête suivante pour générer dynamiquement les dates à partir de 2008/01/01 (ou même simplement de le faire pour toutes les années) et de continuer indéfiniment sans codage en dur?Dates dynamiques dans l'instruction SQL SQL Server
select
case
when oact.fathernum like '112%' then sum(jdt1.debit) - sum(jdt1.credit)
end as [Accounts Receivable],
jdt1.refdate as [Posting Date]
from jdt1
inner join oact on jdt1.account = oact.AcctCode
where (oact.fathernum like '1%')
and
(jdt1.refdate between '2008/01/01' and dateadd(day, -1, '2008/' + cast(month(getdate()) as varchar(2)) + '/01')
or jdt1.refdate between '2009/01/01' and dateadd(day, -1, '2009/' + cast(month(getdate()) as varchar(2)) + '/01')
or jdt1.refdate between '2010/01/01' and dateadd(day, -1, '2010/' + cast(month(getdate()) as varchar(2)) + '/01')
or jdt1.refdate between '2011/01/01' and dateadd(day, -1, '2011/' + cast(month(getdate()) as varchar(2)) + '/01')
or jdt1.refdate between '2012/01/01' and dateadd(day, -1, '2012/' + cast(month(getdate()) as varchar(2)) + '/01')
or jdt1.refdate between '2013/01/01' and dateadd(day, -1, '2013/' + cast(month(getdate()) as varchar(2)) + '/01')
or jdt1.refdate between '2014/01/01' and dateadd(day, -1, '2014/' + cast(month(getdate()) as varchar(2)) + '/01')
or jdt1.refdate between '2015/01/01' and dateadd(day, -1, '2015/' + cast(month(getdate()) as varchar(2)) + '/01')
or jdt1.refdate between '2016/01/01' and dateadd(day, -1, '2016/' + cast(month(getdate()) as varchar(2)) + '/01')
or jdt1.refdate between '2017/01/01' and dateadd(day, -1, '2017/' + cast(month(getdate()) as varchar(2)) + '/01'))
group by oact.fathernum, jdt1.refdate
A défaut, une soin d'essayer à une reformulation utilisant T-SQL dans une procédure stockée qui résout le problème? La borne supérieure de la date peut toujours être l'année en cours tant qu'elle est dynamique.
Est-ce SQL Server 2005 ou supérieur? – RichardTheKiwi
@cyberwiki - oui – m7d