2013-10-11 55 views
0

任何人都可以请帮助我找出一个更方便,高效(最短)的方式来编写下面的脚本?我这样做的原因是因为我最终会在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

您正在使用哪种RDBMS? –

+0

闻起来像用户输入验证...这是不是要离开数据库管理系统 –

+1

因为你明确地设置开始和结束日期,所有你真正需要的是这样的:'选择*从SALESTABLE销售日期@STARTINGDATE和@ ENDINGDATE'之间。 “CASE”的其余部分将不会执行。如果我错过了某些内容,请更新您的问题。 – 2013-10-11 05:05:28

回答

0

如果u使用什么的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

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日期是日期时间的方法。使用此方法:
仅供参考:SSRS不允许空白值对于日期时间参数。它只允许NULL。

第一个创建两个参数 StartingDate和EndingDate并检查允许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

+0

查询中CASE的语法看起来不正确。 –

+0

好的。修正CASE语法。 –

相关问题