Как узнать, сколько условий ИЛИ выполнено? - PullRequest
3 голосов
/ 27 июля 2010

Как я могу узнать, какой из моих результатов удовлетворяет какому количеству условий /

SELECT 
    [TITLE] 
FROM 
    [M_TIPS] 
WHERE 
    [TITLE] LIKE '%VALUE%' OR 
    [TITLE] LIKE '%SQL%'; 

Как узнать, какой из результатов выполнил только 1 условие ИЛИ, а какой из результатов выполнилоба условия.Количество условий не статично, оно может увеличиться.

Может кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

3 голосов
/ 27 июля 2010

Добавьте это к результату:

SELECT 
    [TITLE] 
    case [TITLE] LIKE '%VALUE%' WHEN true then 1 else 0 end as CONTAINS_VALUE
    case [TITLE] LIKE '%SQL%' WHEN true then 1 else 0 end as CONTAINS_SQL
FROM 
    [M_TIPS] 
WHERE 
    [TITLE] LIKE '%VALUE%' OR 
    [TITLE] LIKE '%SQL%'; 
1 голос
/ 27 июля 2010

Короткое замыкание в предложении WHERE * может помешать любому количеству совпадений, превышающему 1, если вы используете OR.

Как насчет сохранения списка совпадений в табличной переменной, а затем подсчета совпадений;

DECLARE @MATCH TABLE (SCORE INT, TOKEN VARCHAR(16))
INSERT @MATCH 
      SELECT 1, 'VALUE'
UNION SELECT 1, 'SQL'
UNION SELECT 1, 'CAKE'

SELECT 
    [TITLE], SUM(M.SCORE)
FROM 
    [M_TIPS] T INNER JOIN @MATCH M ON T.[TITLE] LIKE '%' + M.TOKEN + '%'
GROUP BY T.[TITLE]

==
sql             1
value           1
xx sql value xx 2
0 голосов
/ 27 июля 2010

Если вы используете язык программирования для динамической генерации запросов с условиями, сгенерированными по мере необходимости, тогда я предлагаю генерировать запрос следующим образом:

SELECT [TITLE], SUM([CONDITION_COUNT]) FROM
(SELECT [TITLE], 1 [CONDITION_COUNT] FROM [M_TIPS] 
    WHERE [TITLE] LIKE ConditionString1 UNION ALL
SELECT [TITLE], 1 [CONDITION_COUNT] FROM [M_TIPS] 
    WHERE [TITLE] LIKE ConditionString2 UNION ALL
...
SELECT [TITLE], 1 [CONDITION_COUNT] FROM [M_TIPS] 
    WHERE [TITLE] LIKE ConditionStringN) SQ
GROUP BY [TITLE]
...