2012-03-13 8 views
1

私はこの権利を確実にしたいと思っています。私のレポートのこのセクションは、現在のMTDをデフォルトに設定されています。私がする必要があるのは、ユーザが終了日を変更した場合にMTDにレポートを設定することです。IF Month(@EndingDate)を使用して現在の月でなかった場合は、終了日を使用していました月の初めに戻ります。SQL設定終了日に基づくMTD

Declare @startdate datetime 
Declare @enddate datetime 
--Declare @EndingDate datetime 


--set @EndingDate = '11-15-2011' 

IF Year(@EndingDate) = DATEADD(year,DATEDIFF(year,0, @EndingDate),0) 
BEGIN 
set @startdate = dateadd(month, datediff(month, 0, dateadd(day, datediff(day, 1, getdate()), 0)), 0)--BEGINNING OF CURRENT MONTH 
set @enddate = dateadd(day, datediff(day, 0, getdate()), 0)--THROUGH CURRENT MONTH (TODAY) 
END 

ELSE 
IF Year(@EndingDate) < DATEADD(year, DATEDIFF(year, 0, GetDate())+1, 0)-1 
BEGIN 
set @startdate = dateadd(m,datediff(m,0, @EndingDate),0)--Beginning of Month from @Enddate 
set @enddate = @EndingDate 
END 

あなたが見ることができるように、私は終了日の年が今年かと一致するかどうかを確認するためにそれを切り替えた:私は2011年に入ったまではだから私はIF Year(@EndingDate)を使用してこれに私のコードを変更しうまく働きましたそれに基づいてデータを取得します。

これは論理的な方法ですか?私の問題は、今年は正しいデータがすべて得られていることですが、昨年に戻ったときに特定のプラントのデータが失われています。私は別のレポートをチェックし、すべてのプラントのデータがあるはずですので、日付の比較が正しく設定されていることを確認したかったのです。

+0

申し訳ありませんが、MTDは何ですか? –

+0

今月の月... – msmucker0527

+0

あなたは何をしようとしているのかはっきりしていません。これまで行ってきたことではなく、何をしようとしているのか詳細を教えてください。 – msmucker0527

答えて

1

私はあなたがここで何をしようとしているのかはっきりしていませんが、舞台裏で日付を変更すると、ユーザーにとって欺瞞的になる可能性があります。選択した日付のデータを取得するだけです。以下の式を使用して、RSレポートでデフォルトの日付を月の開始日に簡単に設定できます。このようにして、ユーザーは、場面の裏に生成された日付ではなく、期待しているものを見ています。

月開始日

=Now.AddDays(-Today().Day + 1).Date 
+0

これは私が聞いていたものではありませんでしたが、あなたは実際に別の質問にヒットしました。ユーザーの 'Beginning Date'入力に基づいて' TO: '日付を月の初めに設定する方法はありますか?たとえば、SSRSで「開始日:2012年2月12日」と「終了日:2012年2月21日」を選択した場合は、「TO:2012年2月1日」 –

関連する問題