2010-03-15 4 views
0

Supposons que j'ai la table de style suivante, col1 col2 et col3 ont les mêmes étendues de valeur, je veux sélectionner les enregistrements lorsque deux des 3 colonnes ont un combinaison de valeurs telles que ('ab' et 'bc'), dans l'exemple suivant, les trois premiers enregistrements doivent être sélectionnés. Tout bon moyen de le faire? J'utilise Sybase.comment sélectionner les enregistrements dont la combinaison de plusieurs champs sera égale à une valeur spécifique

| id | col1 | col2 | col3 | 
    1  ab  bc  null 
    2  null ab  bc 
    3  ab  ab  bc 
    4  de  ab  xy 

Merci.

Répondre

0

Je n'ai pas Sybase pour vérifier, mais vous pouvez essayer ceci:

select * from Table where (col1 = "ab" or col2 = "ab" or Col3 = "ab") 
and (col1 = "bc" or col2 = "bc" or Col3 = "bc") 
-1

Je suis d'accord que la réponse donnée ici est tout à fait acceptable, mais je pense que s'il y avait plus de quelques colonnes Pour pouvoir être évalué, l'imbrication des comparaisons dans la clause WHERE pourrait devenir un peu lourde et illisible. J'ai dû surmonter un problème similaire et j'ai trouvé que la technique suivante était très utile (je l'ai adaptée pour résoudre le problème ci-dessus). Notez que l'évaluation de Total dans la requête externe peut être facilement adaptée pour augmenter ou diminuer le nombre de colonnes contenant les critères évalués:

SELECT * 
FROM 
(SELECT id 
     , col1   
     , col2 
     , col3 
     , SUM(CASE WHEN UPPER(col1) IN ('AB', 'BC') THEN 1 ELSE 0 END 
      + CASE WHEN UPPER(col2) IN ('AB', 'BC') THEN 1 ELSE 0 END 
      + CASE WHEN UPPER(col3) IN ('AB', 'BC') THEN 1 ELSE 0 END) as Total 
FROM <table> 
GROUP BY id 
     , col1 
     , col2 
     , col3) as results 
WHERE Total >= 2 
ORDER BY id 
Questions connexes