ありがとうございました。SQL ServerのSQLステートメントでの動的日付
私は、任意の年に始まり、決して終わらない(未来に行く)年のデータを比較し、最後に完了した月までの同じ期間(毎月のデータ2月1日まで表示されません)。 T-SQLを使用することはできません。 2008/01/01から日付を動的に生成するために次のクエリを再フォーマットする方法(またはすべての年にそれをやっているだけです)と、ハードコーディングを行わずに永遠に行く方法はありますか?
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
問題を解決するストアドプロシージャでT-SQLを使用した再定式化で手を携えようとする人はいませんか?日付の上限は、動的である限り、常に現在の年にすることができます。 datesetsを生成し、それに参加する番号テーブルと
このSQL Server 2005以上ですか? – RichardTheKiwi
@cyberwiki - あり – m7d