Sql 按关键字筛选数据,并记下它们的位置

Sql 按关键字筛选数据,并记下它们的位置,sql,sql-server,reporting-services,Sql,Sql Server,Reporting Services,所以我现在有一个问题 SELECT * FROM TABLE1 它除了生成包含文本Textbox1 Textbox2 Textbox3 Textbox4的其他内容外,还生成了4列 我现在想通过这些文本框中的关键字来过滤这个查询。基本上,用户可以输入0到5个关键字,并且只有在其中一个文本框中找到至少一个关键字时,表1中的行才会显示。此外,还应添加一个新列,对于在文本框中找到的每个关键字,应说明在哪个关键字和哪个文本框中找到了该关键字 查询本身稍后将在用户输入关键字的SSRS中运行。因此,关键字可

所以我现在有一个问题

SELECT *
FROM TABLE1
它除了生成包含文本Textbox1 Textbox2 Textbox3 Textbox4的其他内容外,还生成了4列

我现在想通过这些文本框中的关键字来过滤这个查询。基本上,用户可以输入0到5个关键字,并且只有在其中一个文本框中找到至少一个关键字时,表1中的行才会显示。此外,还应添加一个新列,对于在文本框中找到的每个关键字,应说明在哪个关键字和哪个文本框中找到了该关键字

查询本身稍后将在用户输入关键字的SSRS中运行。因此,关键字可以作为varchars访问。对于查询,您可以使用以下命令:

DECLARE @Keyword1 AS VARCHAR(100) = '';
DECLARE @Keyword2 AS VARCHAR(100) = '';
DECLARE @Keyword3 AS VARCHAR(100) = '';
DECLARE @Keyword4 AS VARCHAR(100) = '';
DECLARE @Keyword5 AS VARCHAR(100) = '';
谢谢你的帮助

编辑:

这是一个非常不公平的解决方案,它不完全是你想要的,但希望足够接近

为了改进它,特别是如果你想把它扩展到更多的列/关键字,我会考虑不旋转数据,测试每一行,然后重新聚合它的结果。

这将给出以下结果。
在艾伦·斯科菲尔德的帮助下,我找到了我需要的解决方案

SELECT * from( Select*,
 CASE WHEN Textbox1 like '%'+@Keyword1+'%' AND @Keyword1 <> '' THEN @Keyword1 +', '  ELSE '' END +
      CASE WHEN Textbox1 like '%'+@Keyword2+'%' AND @Keyword2 <> '' THEN @Keyword2 +', '  ELSE '' END +
      CASE WHEN Textbox1 like '%'+@Keyword3+'%' AND @Keyword3 <> '' THEN @Keyword3 +', '  ELSE '' END +
      CASE WHEN Textbox1 like '%'+@Keyword4+'%' AND @Keyword4 <> '' THEN @Keyword4 +', '  ELSE '' END +
      CASE WHEN Textbox1 like '%'+@Keyword5+'%' AND @Keyword5 <> '' THEN @Keyword5 +', '  ELSE '' END  
      As Textbox1found,


      CASE WHEN Textbox2 like '%'+@Keyword1+'%' AND @Keyword1 <> '' THEN @Keyword1 +', '  ELSE '' END +
      CASE WHEN Textbox2 like '%'+@Keyword2+'%' AND @Keyword2 <> '' THEN @Keyword2 +', '  ELSE '' END +
      CASE WHEN Textbox2 like '%'+@Keyword3+'%' AND @Keyword3 <> '' THEN @Keyword3 +', '  ELSE '' END +
      CASE WHEN Textbox2 like '%'+@Keyword4+'%' AND @Keyword4 <> '' THEN @Keyword4 +', '  ELSE '' END +
      CASE WHEN Textbox2 like '%'+@Keyword5+'%' AND @Keyword5 <> '' THEN @Keyword5 +', '  ELSE '' END   
      As Textbox2found,

      CASE WHEN Textbox3 like '%'+@Keyword1+'%' AND @Keyword1 <> '' THEN @Keyword1 +', '  ELSE '' END +
      CASE WHEN Textbox3 like '%'+@Keyword2+'%' AND @Keyword2 <> '' THEN @Keyword2 +', '  ELSE '' END +
      CASE WHEN Textbox3 like '%'+@Keyword3+'%' AND @Keyword3 <> '' THEN @Keyword3 +', '  ELSE '' END +
      CASE WHEN Textbox3 like '%'+@Keyword4+'%' AND @Keyword4 <> '' THEN @Keyword4 +', '  ELSE '' END +
      CASE WHEN Textbox3 like '%'+@Keyword5+'%' AND @Keyword5 <> '' THEN @Keyword5 +', '  ELSE '' END
      As Textbox3found,

      CASE WHEN Textbox4 like '%'+@Keyword1+'%' AND @Keyword1 <> '' THEN @Keyword1 +', '  ELSE '' END +
      CASE WHEN Textbox4 like '%'+@Keyword2+'%' AND @Keyword2 <> '' THEN @Keyword2 +', '  ELSE '' END +
      CASE WHEN Textbox4 like '%'+@Keyword3+'%' AND @Keyword3 <> '' THEN @Keyword3 +', '  ELSE '' END +
      CASE WHEN Textbox4 like '%'+@Keyword4+'%' AND @Keyword4 <> '' THEN @Keyword4 +', '  ELSE '' END +
      CASE WHEN Textbox4 like '%'+@Keyword5+'%' AND @Keyword5 <> '' THEN @Keyword5 +', '  ELSE '' END
      AS Textbox4found

      FROM Table1)as Result
      WHERE Result.Textbox1found <> '' OR Result.Textbox2found <> '' OR Result.Textbox3found <> '' OR Result.Textbox4found <> '' or (@Keyword1='' AND @Keyword2='' AND @Keyword3='' AND @Keyword4='' AND @Keyword5='')

我切换到一个基于文本框的查询,它将为每个文本框生成一列,其中包含在该文本框中找到的关键字

示例数据和所需结果将有所帮助。如果在多个文本框列中找到一个关键字,该怎么办?如果在一个或多个文本框列中发现多个关键字,该怎么办?我添加了一张图片,希望能显示所需的结果和示例数据。我在这里选择数字只是为了举例,但在数据本身中有文本。如果关键字被多次找到,它应该显示找到它的所有文本框。如果在同一个框中找到多个关键字,它应该显示每个关键字的找到位置。因此,在您的答案的帮助下,我找到了一个很好的解决方案。我将案例按文本框拆分,为每个文本框获得一个新列。我还从一开始就删除了集合,并将它们放在案例中,因为在ssrs中不能运行两个查询语句。我还包括了一个,在每次查找之后,检查所有参数是否为空,这将生成未过滤列表。谢谢你的帮助。很高兴你把它整理好了。然而,在SSR中,您可以执行任意数量的代码。我有时有100行的脚本。唯一重要的是,它将只输出第一个记录集,因此不能有两个简单的SELECT语句。我发布的脚本都在我的数据集查询中。奇怪的是,我在集合中出错了。但是我找到了一个解决办法,所以它其实没那么重要。
SELECT * from( Select*,
 CASE WHEN Textbox1 like '%'+@Keyword1+'%' AND @Keyword1 <> '' THEN @Keyword1 +', '  ELSE '' END +
      CASE WHEN Textbox1 like '%'+@Keyword2+'%' AND @Keyword2 <> '' THEN @Keyword2 +', '  ELSE '' END +
      CASE WHEN Textbox1 like '%'+@Keyword3+'%' AND @Keyword3 <> '' THEN @Keyword3 +', '  ELSE '' END +
      CASE WHEN Textbox1 like '%'+@Keyword4+'%' AND @Keyword4 <> '' THEN @Keyword4 +', '  ELSE '' END +
      CASE WHEN Textbox1 like '%'+@Keyword5+'%' AND @Keyword5 <> '' THEN @Keyword5 +', '  ELSE '' END  
      As Textbox1found,


      CASE WHEN Textbox2 like '%'+@Keyword1+'%' AND @Keyword1 <> '' THEN @Keyword1 +', '  ELSE '' END +
      CASE WHEN Textbox2 like '%'+@Keyword2+'%' AND @Keyword2 <> '' THEN @Keyword2 +', '  ELSE '' END +
      CASE WHEN Textbox2 like '%'+@Keyword3+'%' AND @Keyword3 <> '' THEN @Keyword3 +', '  ELSE '' END +
      CASE WHEN Textbox2 like '%'+@Keyword4+'%' AND @Keyword4 <> '' THEN @Keyword4 +', '  ELSE '' END +
      CASE WHEN Textbox2 like '%'+@Keyword5+'%' AND @Keyword5 <> '' THEN @Keyword5 +', '  ELSE '' END   
      As Textbox2found,

      CASE WHEN Textbox3 like '%'+@Keyword1+'%' AND @Keyword1 <> '' THEN @Keyword1 +', '  ELSE '' END +
      CASE WHEN Textbox3 like '%'+@Keyword2+'%' AND @Keyword2 <> '' THEN @Keyword2 +', '  ELSE '' END +
      CASE WHEN Textbox3 like '%'+@Keyword3+'%' AND @Keyword3 <> '' THEN @Keyword3 +', '  ELSE '' END +
      CASE WHEN Textbox3 like '%'+@Keyword4+'%' AND @Keyword4 <> '' THEN @Keyword4 +', '  ELSE '' END +
      CASE WHEN Textbox3 like '%'+@Keyword5+'%' AND @Keyword5 <> '' THEN @Keyword5 +', '  ELSE '' END
      As Textbox3found,

      CASE WHEN Textbox4 like '%'+@Keyword1+'%' AND @Keyword1 <> '' THEN @Keyword1 +', '  ELSE '' END +
      CASE WHEN Textbox4 like '%'+@Keyword2+'%' AND @Keyword2 <> '' THEN @Keyword2 +', '  ELSE '' END +
      CASE WHEN Textbox4 like '%'+@Keyword3+'%' AND @Keyword3 <> '' THEN @Keyword3 +', '  ELSE '' END +
      CASE WHEN Textbox4 like '%'+@Keyword4+'%' AND @Keyword4 <> '' THEN @Keyword4 +', '  ELSE '' END +
      CASE WHEN Textbox4 like '%'+@Keyword5+'%' AND @Keyword5 <> '' THEN @Keyword5 +', '  ELSE '' END
      AS Textbox4found

      FROM Table1)as Result
      WHERE Result.Textbox1found <> '' OR Result.Textbox2found <> '' OR Result.Textbox3found <> '' OR Result.Textbox4found <> '' or (@Keyword1='' AND @Keyword2='' AND @Keyword3='' AND @Keyword4='' AND @Keyword5='')