任何人都可以帮我找出一种更方便,更有效(最短)的编写以下脚本的方法吗?我这样做的原因是因为我最终会在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
答案 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
答案 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值。
您的数据集查询将是这样的
SELECT * FROM SalesTable
Where (SalesDate IS NULL OR @StartingDate IS NULL)
OR (SalesDate between ISNULL(@StartingDate, SalesDate)
AND ISNULL(@EndingDate, SalesDate))
将数据集参数分配给报告参数
现在你很高兴。