0

以下のスクリプトをより便利で効率的な (最短の) 方法で書く方法を教えてください。これを行う理由は、SSRS でスクリプトを使用することになるためです。

SSRS では、2 つのパラメーターがあり、どちらも空白の値を取るように設定されています。

SSRS を実行しているユーザーが開始日パラメーターのみを示した場合、私のレポートは任意の日付 >= 開始日を示す必要があります。

ユーザーが @startingdate と @enddate の両方に日付を入力した場合、私のスクリプトは @startingdate と @enddate の間の日付のみを検索します。

皆さんは、私が達成しようとしていることをちょっと理解していますか? このシナリオに似た SSRS レポートがありますが、ステートメントの 1 つを更新すると、他のステートメントでも更新する必要があるため、更新するのは非常に面倒です。また、このため、スクリプトは大きくて反復的です。

コードを短くしたり、コードの煩わしさを軽減したりするためのより良い方法を見つけるのを手伝ってくれるなら、教えてください、ありがとう!

以下は、私が使用するサンプルスクリプトです。

DECLARE @STARTINGDATE
DECLARE @ENDINGDATE

SET @STARTINGDATE = '10/01/2013'
SET @ENDINGDATE = '10/05/2013'

CASE 
   WHEN @STARTINGDATE <> '' AND @ENDINGDATE <> '' 
    SELECT * FROM SALESTABLE
    WHERE SALESDATE BETWEEN @STARTINGDATE AND @ENDINGDATE
   END

   WHEN @STARTINGDATE = '' AND @ENDINGDATE = ''
    SELECT * FROM SALESTABLE
   END

   WHEN @STARTING <> '' AND @ENDINGDATE = ''
    SELECT * FROM SALESABLE
        WHERE SALESDATE >= @STARTINGDATE
   END

   WHEN @ENDINGDATE <> '' AND @STARTINGDATE = ''
    SELECT * FROM SALESABLE
        WHERE SALESDATE <= @ENDINGDATE
   END
4

2 に答える 2

0

IF ELSE ステートメントを使用するとどうなりますか?

IF @STARTINGDATE IS NOT NULL AND @ENDINGDATE IS NULL

SELECT * FROM SALESTABLE WHERE SALESDATE >= CONVERT(DATE,@STARTINGDATE,103)

ELSE IF @STARTINGDATE IS NOT NULL AND @ENDINGDATE IS NOT NULL

SELECT * FROM SALESTABLE WHERE SALESDATE >= CONVERT(DATE,@STARTINGDATE,103)

AND SALESDATE<DATEADD(DAY,1,CONVERT(DATE,@ENDINGDATE,103))

ELSE

SELECT * FROM SALESTABLE

参考文献http://sqlfiddle.com/#!3/783c03/12

于 2013-10-11T05:43:53.750 に答える