在where子句SQL中的case语句中使用参数

时间:2013-11-27 12:51:49

标签: sql parameters sql-server-2008-r2 case

我需要使用ssrs创建一个报告,但我在参数方面遇到了一些困难。 我有3个参数,开始日期,结束日期和SalesID。

这是我需要做的事情清单;

1-Dates可以为null,如果保留为null,则所有日期都应该在报告上(我想这里需要一个case语句)

2- SalesID是手动输入的,可以是多个值或null。如果它为null,则所有salesid都应该报告。

到目前为止,我尝试了类似SalesId和日期的内容,下面是一条查询;

AND ST.CREATEDDATE BETWEEN (@Baslangic) and (@Bitis)
AND CASE CPDR.SALESID   WHEN @SalesID THEN @SalesID
                        WHEN NULL THEN 'Hepsi'   END

(Hepsi用我的母语表示“全部”,因此在参数选择中有点欺骗SSRS,不确定它是否会起作用。其他参数只是“开始”和“结束”。)

我得到“在预期条件的上下文中指定的非布尔类型的表达式”,在case语句中出错,不知道该怎么做。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我认为这样的事情

   AND XXXX = CASE CPDR.SALESID   WHEN @SalesID THEN @SalesID
   WHEN NULL THEN 'Hepsi'   END

什么是等于@SalesID或'Hepsi'? 你似乎错过了要与之比较的case语句前面的东西(因此布尔表达式错误)。我在我的例子中添加了XXXX。

编辑 - 除非您在示例后有更多WHEN案例,否则请使用ELSE而不是最后一个WHEN:

ELSE 'Hepsi' END

答案 1 :(得分:0)

尝试这样的smt:

AND (@Baslangic is null OR ST.CREATEDDATE BETWEEN (IsNull(@Baslangic,GETDATE())) and (isNull(@Bitis,GETDATE())))
AND (@SalesID is null OR CPDR.SALESID IN (@SalesID))