我有一个要求,即根据用户选择的选项生成报告。
选项如下:
必填字段:
单位:
开始日期:
结束日期:
选择一个选项(单选按钮):
活动日期
最终日期
根据所选的选项,我的报告应相应生成 到目前为止,代码是:
if( get_query_var( 'cat' ) == 28 ) {
$cat = get_category( 28 );
if( ! $cat->parent_category() ) {
// output content here
}
}
请注意,这只是示例代码,实际代码要复杂得多。
我需要创建一个存储过程以在SSRS报告中使用它。当我运行此代码时,它不会返回任何数据。
答案 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
子句中使用函数,还有其他一些替代方法,例如CASE
或UNION
来实现此目的。