如何在单个查询中将多个文本条件与文本字段进行比较?

问题描述 投票:0回答:2

我有多个文本条件的列表,我需要使用这些条件来计算使用LIKE运算符在数据库中匹配文本的出现次数。

我如何编写一个查询,该查询将一次与所有条件进行比较并返回每个条件的计数汇总列表?

我从一个简单的查询开始,我想使用while循环对其进行迭代。但不幸的是,我无权创建一个表,该表将包含每个循环要引用的条件,因此我必须分别为每个条件准备查询。

SELECT sum(X), sum(Y), Z
FROM table
WHERE text LIKE 'criteria sample'
WHERE A = nnnnnn
AND B > 0
Group by Z

为了避免运行和编写多个查询,如何将所有条件加载到一个查询中以针对内容运行它们,以便更快地获得结果?

sql sql-server
2个回答
0
投票

就像应该在后面加上%符号,这样,即使要查找的单词之前或之后都有单词,也可以将其捕获。我还删除了多余的WHERE

SELECT sum(X), sum(Y), Z
FROM table
WHERE text LIKE '%criteria sample%'
AND A = 'nnnnnn'
AND B > 0
Group by Z

0
投票

如果您希望每一个匹配的行,您都可以简单地说WHERE text LIKE '%foo%' OR text LIKE '%bar%'。但是,如果我理解您的问题,则实际上您需要一个与'%foo%'匹配的行数和一个与'%bar%'匹配的行数。这意味着对于每个标准文本,必须分别运行SUMGROUP BY

一种可能的解决方案是分别编写所有查询,然后在末尾union。请注意,union要求每列都必须有一个名称。您还将在每个子查询中都需要一个静态标识符字符串,以便可以确定满足了哪些条件。这样您将得到类似的内容:

SELECT sum(X) AS sumx, sum(Y) AS sumy, Z, 'foo' AS criteria FROM table WHERE text LIKE '%foo%' AND A = nnnnnn AND B > 0 Group by Z
UNION
SELECT sum(X) AS sumx, sum(Y) AS sumy, Z, 'bar' AS criteria FROM table WHERE text LIKE '%bar%' AND A = nnnnnn AND B > 0 Group by Z
UNION
...(etc)...
© www.soinside.com 2019 - 2024. All rights reserved.