我的数据集查询使用LIKE语句选择值:
WHERE unitcode LIKE 'A2%'
所以这会返回A200,A201,A202等。
我的报告将其替换为参数:
WHERE unitcode LIKE @code
其中@code可以是'A2%'或'B2%',可通过下拉列表选择,以显示包含A2代码或B2代码的报告。
现在我想添加第三个选项,同时选择A2和B2代码。这可能吗? LIKE工作的方式似乎阻止我在单个参数中绑定多个LIKE,并且我尝试使用@code为WHERE @code
来执行unitcode LIKE 'A2%' OR unitcode LIKE 'B2%'
,但这会导致错误。
您可以在此处使用SQL Server的增强型LIKE
:
SELECT *
FROM yourTable
WHERE unitcode LIKE '[AB]2%';
这可能会解决问题的查询方面,但您仍然需要一种方法来收集参数,以便可以编写上述参数。
我正在运行内存,因为我现在无法访问SSRS或报表生成器,但是,如果我没记错,如果使用存储过程,则将一组值作为分隔字符串传递。这是伪SQL的结果,但是你可以使用字符串拆分器做这样的事情(假设没有标记版本的SQL Server 2016+):
CREATE PROC YourProc @code varchar(100) AS
BEGIN
SELECT {Your SELECT statement}
FROM {Your FROM and JOINs}
WHERE EXISTS (SELECT 1
FROM STRING_SPLIT(@code,',') SS
WHERE {YT}.unitcode LIKE SS.[value]) --assumes that the report passed values with a % at the end
AND {Rest of WHERE}; --Otherwise use LIKE SS.[value] + '%'
END