报表生成器中WHERE子句中的SQL可选条件

时间:2018-01-10 05:21:10

标签: mysql reportbuilder3.0

我正在使用Microsoft Report Builder 3.0创建报告。我想在WHERE子句中添加一个附加条件取决于布尔参数@param。在编程中,通过附加SQL字符串很容易,如:

String sql = "SELECT * FROM tblA WHERE tblA.columnA = 'data' ";
if(param)
{
    sql += "AND tblA.columnB IN (SELECT column FROM tbl)";
}

但是如何在纯SQL查询中执行此操作?我尝试使用CASE,但似乎它不起作用。这就是我的尝试:

SELECT * FROM tblA 
WHERE tblA.columnA = 'data'
CASE @param WHEN 1 THEN AND tblA.columnB IN (SELECT column FROM tbl) END

3 个答案:

答案 0 :(得分:1)

只需使用涉及参数的逻辑:

SELECT *
FROM tblA
WHERE
    columnA = 'data' AND
    (!param OR columnB IN (SELECT column FROM tbl));

如果WHERE包含columnA,并且参数设置为false或参数设置为true且子查询成功,则data子句将评估为true。

答案 1 :(得分:0)

param在客户端进行设置,因此您需要在客户端进行查询,您可以使用CASE查询来实现此目的,如下所示

String sql = "SELECT * FROM tblA 
           WHERE tblA.columnA = 'data' 
           AND CASE " +param+ "
               WHEN 1 THEN tblA.columnB IN (SELECT column FROM tbl) 
              ELSE 1 
           END";

我希望它会起作用

答案 2 :(得分:0)

SELECT * FROM [tblA] WHERE tblA.columnA = 'data' AND 
    (@param <> 1 OR columnB IN (SELECT column FROM tbl)).

简而言之,可选条件可以置于 OR 条件中,并带有您要验证的标志。假设您在名为@name和@dept的过程中传递了参数,并且您希望检索所有提及名称的结果或具有特定部门中提到的名称的结果,那么您可以将其写为

SELECT * FROM [Employees] WHERE Name = @name AND (Department = @dept OR @dept = 0)