有没有办法缩短这个脚本?

时间:2013-10-11 04:57:21

标签: sql reporting-services scripting ssrs-2008 case

任何人都可以帮我找出一种更方便,更有效(最短)的编写以下脚本的方法吗?我这样做的原因是因为我最终会在SSRS上使用脚本。

在SSRS上,将有两个参数,两者都设置为采用空白值。

如果运行SSRS的用户仅指示了开始日期参数,那么我的报告应该给出任何日期> =开始日期。

如果用户在@startingdate和@endingdate上都设置了日期,我的脚本将只搜索@startingdate和@endingdate之间的日期。

你们有点得到我想要完成的事吗?我有一个类似于这种情况的SSRS报告,但更新非常麻烦,因为如果我更新其中一个语句,我将不得不在其他语句上执行此操作。由于这个原因,剧本也很重要。

如果您可以帮我找出更好的缩短方法或减少代码繁琐,请告诉我,谢谢!

以下是我使用的示例脚本:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果StartingDate和EnddingDate日期是字符串,则可以尝试此操作。使用StartingDate和EnddingDate作为文本,您将松开SSRS中的日期选择器功能。无论如何这里是一种缩短上述脚本的方法

Select * FROM SalesTable
Where SalesDate between 
CASE WHEN @StartingDate = '' THEN SalesDate ELSE @StartingDate END
AND CASE WHEN @EndingDate = '' THEN SalesDate ELSE @EndingDate END

方法2 如果StartingDate和Endding日期是dateTime。使用此方法:
仅供参考:SSRS不允许 DateTime 参数的空白值。它只允许NULL。

首先创建两个参数 StartingDate和EndingDate,然后选中Allow NULL值。

enter image description here

您的数据集查询将是这样的

SELECT * FROM SalesTable
Where (SalesDate IS NULL OR @StartingDate IS NULL) 
OR (SalesDate between ISNULL(@StartingDate, SalesDate)
AND  ISNULL(@EndingDate, SalesDate))

将数据集参数分配给报告参数

enter image description here

现在你很高兴。

enter image description here