SQL Report Builder 中 WHERE 子句中的可选条件
SQL optional condition in WHERE clause in Report Builder
我正在使用 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
只需使用涉及参数的逻辑:
SELECT *
FROM tblA
WHERE
columnA = 'data' AND
(!param OR columnB IN (SELECT column FROM tbl));
如果 columnA
包含 data
并且参数设置为 false,或者参数设置为 true 且子查询成功,则 WHERE
子句的计算结果为 true。
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";
希望有用
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)
我正在使用 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
只需使用涉及参数的逻辑:
SELECT *
FROM tblA
WHERE
columnA = 'data' AND
(!param OR columnB IN (SELECT column FROM tbl));
如果 columnA
包含 data
并且参数设置为 false,或者参数设置为 true 且子查询成功,则 WHERE
子句的计算结果为 true。
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";
希望有用
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)