SQL Server:从字符串中选择SELECT

时间:2017-07-21 08:59:25

标签: sql-server tsql

我正在努力解决这个问题:我有两个SQL语句,它们有两组不同的关键字。这些存储在临时表中,因为我无法更新,删除或插入表中。

如何编写第三条SQL语句(限制在每个语句中的SQL字符),其中包含:"如果' pingu'并且' noot'是正确的,否则如果' sponge'和' bob'是真实的展示结果" (这个有效)?但那我怎么说:"如果' pingu'和'海绵'然后选择为true,或者“bob”'并且' noot'然后选择真实",但保持' pingu'并且' noot'如果被选中则为真?

关键字列表1的示例:' Pingu '和' Noot '

DECLARE @teststring varchar(512) = '{KEYWORD}' 
SELECT TOP 1 k.type 
FROM (VALUES

('pingu', '66'), ('noot', '66'))

k(word,type) WHERE @teststring LIKE '%' + k.word + '%' 

GROUP BY k.type 
HAVING COUNT(1) >=2
ORDER BY COUNT(1) DESC;

关键字列表2的示例:' 海绵'和' Bob '

DECLARE @teststring varchar(512) = '{KEYWORD}' 

SELECT TOP 1 k.type 
FROM (VALUES ('sponge', '66'), ('bob', '66')) k (word, type) 
WHERE @teststring LIKE '%' + k.word + '%' 
GROUP BY k.type 
HAVING COUNT(1) >= 2
ORDER BY COUNT(1) DESC;

1 个答案:

答案 0 :(得分:0)

如何将两个源查询与UNION ALL组合?

例如(调整原始查询):

DECLARE @teststring varchar(512) = '{KEYWORD}';

WITH Keywords AS (
    SELECT *
    FROM (VALUES ('pingu', '66'), ('noot', '66')) k(word, type)

    UNION ALL

    SELECT * 
    FROM (VALUES ('sponge', '66'), ('bob', '66')) k(word, type) 
)

SELECT TOP 1 k.type 
FROM Keywords k
WHERE @teststring LIKE '%' + k.word + '%' 
GROUP BY k.type 
HAVING COUNT(1) >=2
ORDER BY COUNT(1) DESC;

如果在@teststring中找到至少两个关键字,无论哪个来源查询来自关键字,

,都会返回结果行。

注意:如果关键字列表很大,则可能需要重新处理查询,以便可以使用索引来更有效地处理WHERE子句。