SQL查询在参数选择的基础上生成报告

时间:2015-05-08 00:51:12

标签: sql sql-server sql-server-2008

我有一个要求,即根据用户选择的选项生成报告。

选项如下:

必填字段:

单位:

开始日期:

结束日期:

选择一个选项(单选按钮):

活动日期

最终日期

根据所选的选项,我的报告应相应生成 到目前为止,代码是:

if( get_query_var( 'cat' ) == 28 ) {

     $cat = get_category( 28 );

     if( ! $cat->parent_category() ) {

         // output content here

     }

}
  

请注意,这只是示例代码,实际代码要复杂得多。

我需要创建一个存储过程以在SSRS报告中使用它。当我运行此代码时,它不会返回任何数据。

2 个答案:

答案 0 :(得分:1)

修改

我之前的回答是错误的,因为它是基于对选择一个部分的误读。

首先,以下是错误的:

 DECLARE @FinalizedDate DateTime 
 DECLARE @EventDate     DateTime 

您的代码不应该作为单独的日期时间传递。它应该将选择作为单个值传递,指示他们是否要测试Finalized或Event日期。所以,像这样:

DECLARE @DateOpt varchar(20)

DateOp将包含" EventDate"或" FinalizedDate"

这意味着您的where子句将如下所示:

WHERE  (Org = @Org)
AND (

( (@DateOpt ='EVENTDATE') AND (EventDate BETWEEN @StartDate  AND @EndDate) )
OR
( (@DateOpt ='FinalizedDate') AND (FinalizedDate BETWEEN @StartDate  AND @EndDate) )

)

答案 1 :(得分:0)

您可以使用ISNULL功能在WHERE子句中包含或排除可选参数。

SELECT A.*, EventDate, FinalizedDate, Org
FROM ABC A
WHERE Org = @Org
AND (@EventDate BETWEEN @StartDate AND @EndDate) 
OR (@FinalizedDate BETWEEN @StartDate AND @EndDate)
AND EventDate = ISNULL(@EventDate, EventDate)
AND FinalizedDate = ISNULL(@FinalizedDate , FinalizedDate)

为了获得更好的性能,因为最好不要在WHERE子句中使用函数,还有其他一些替代方法,例如CASEUNION来实现此目的。