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
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 回答
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))

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

在此处输入图像描述

现在你可以走了。

在此处输入图像描述

于 2013-10-11T15:35:25.730 回答