SQL 拆分逗号分隔值并将其与 SSRS 中的多列表值进行比较
SQL to split Comma Separated values and compare it with a multi list value in SSRS
我的 table 中有一个字段,其中有多个原因代码串联在 1 列中。
例如2 条记录
Reason_Codes
Record1: 001,002,004,009,010
Record2: 001,003,005,006
在我的 SSRS 报告中,用户将使用上述原因代码之一搜索数据。例如
- 001 将检索这两条记录。
- 005 将检索第二条记录
等等。
请告知如何使用 SQL 或存储过程实现此目的。
非常感谢。
很久以前我就写过这样的博客。可能这会有所帮助:http://dotnetinternal.blogspot.com/2013/10/comma-separated-to-temp-table.html
核心解决方案是将逗号分隔值转换为临时 table,然后对临时 table 执行简单查询以获得所需结果。
如果您只是传递一个原因代码进行搜索,您甚至不需要费心拆分逗号分隔的列表:您只需使用 LIKE
子句,如下所示:
SELECT tb.field1, tb.field2
FROM SchemaName.TableName tb
WHERE ',' + tb.Reason_Codes + ',' LIKE '%,' + @ReasonCode + ',%';
尝试以下方法查看:
DECLARE @Bob TABLE (ID INT IDENTITY(1, 1) NOT NULL, ReasonCodes VARCHAR(50));
INSERT INTO @Bob (ReasonCodes) VALUES ('001,002,004,009,010');
INSERT INTO @Bob (ReasonCodes) VALUES ('001,003,005,006');
DECLARE @ReasonCode VARCHAR(5);
SET @ReasonCode = '001';
SELECT tb.ID, tb.ReasonCodes
FROM @Bob tb
WHERE ',' + tb.ReasonCodes + ',' LIKE '%,' + @ReasonCode + ',%';
-- returns both rows
SET @ReasonCode = '005';
SELECT tb.ID, tb.ReasonCodes
FROM @Bob tb
WHERE ',' + tb.ReasonCodes + ',' LIKE '%,' + @ReasonCode + ',%';
-- returns only row #2
我的 table 中有一个字段,其中有多个原因代码串联在 1 列中。 例如2 条记录
Reason_Codes
Record1: 001,002,004,009,010
Record2: 001,003,005,006
在我的 SSRS 报告中,用户将使用上述原因代码之一搜索数据。例如
- 001 将检索这两条记录。
- 005 将检索第二条记录 等等。
请告知如何使用 SQL 或存储过程实现此目的。 非常感谢。
很久以前我就写过这样的博客。可能这会有所帮助:http://dotnetinternal.blogspot.com/2013/10/comma-separated-to-temp-table.html
核心解决方案是将逗号分隔值转换为临时 table,然后对临时 table 执行简单查询以获得所需结果。
如果您只是传递一个原因代码进行搜索,您甚至不需要费心拆分逗号分隔的列表:您只需使用 LIKE
子句,如下所示:
SELECT tb.field1, tb.field2
FROM SchemaName.TableName tb
WHERE ',' + tb.Reason_Codes + ',' LIKE '%,' + @ReasonCode + ',%';
尝试以下方法查看:
DECLARE @Bob TABLE (ID INT IDENTITY(1, 1) NOT NULL, ReasonCodes VARCHAR(50));
INSERT INTO @Bob (ReasonCodes) VALUES ('001,002,004,009,010');
INSERT INTO @Bob (ReasonCodes) VALUES ('001,003,005,006');
DECLARE @ReasonCode VARCHAR(5);
SET @ReasonCode = '001';
SELECT tb.ID, tb.ReasonCodes
FROM @Bob tb
WHERE ',' + tb.ReasonCodes + ',' LIKE '%,' + @ReasonCode + ',%';
-- returns both rows
SET @ReasonCode = '005';
SELECT tb.ID, tb.ReasonCodes
FROM @Bob tb
WHERE ',' + tb.ReasonCodes + ',' LIKE '%,' + @ReasonCode + ',%';
-- returns only row #2