2010-07-27 4 views
3

Comment puis-je savoir ce qui de mon résultat a satisfait combien nombre de conditions/Comment savoir combien de conditions OU sont satisfaites?

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

Comment savoir ce qui du résultat satisfait seulement 1 ou état et qui du résultat satisfait les deux conditions. Le nombre de conditions n'est pas statique, il peut augmenter.

Quelqu'un peut-il aider s'il vous plaît?

+0

Vous pouvez vérifier chaque résultat après la requête avec quel langage de programmation que vous utilisez pour voir si elle correspond à une ou plusieurs conditions. – HyperCas

Répondre

3

Ajoutez à cela le résultat:

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%'; 
+0

Merci pour votre suggestion, mais cela ne sera utile que pour un nombre inférieur de situations où, la condition où n'est pas statique et si elle va augmenter alors il ne sera pas utile (signifie que j'ai redresser de nombreuses déclarations de cas). Une solution à cela? –

+0

Si vous avez du code dynamique pour ajouter des conditions à la partie WHERE, vous pouvez utiliser le même code pour ajouter des colonnes à la partie SELECT. –

1

Un court-circuit dans une clause WHERE * peut empêcher tout nombre de correspondances supérieure à 1 si vous utilisez OR. Que diriez-vous de stocker votre liste de correspondance dans une variable de table puis de compter les correspondances?

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

En supposant que vous utilisez un langage de programmation pour générer dynamiquement des requêtes avec les conditions générées selon les besoins, alors je suggère que la génération de la requête comme ceci:

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] 
Questions connexes