如何选择多个字段组合将等于特定值的记录

时间:2010-03-15 09:20:30

标签: sql

假设我有以下样式表,col1 col2和col3具有相同的值范围,我想在3列中的两列具有值组合(例如('ab'和'bc')时选择记录,在下面的例子,应该选择前3个记录。有什么好办法吗?我正在使用Sybase。

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

感谢。

2 个答案:

答案 0 :(得分:0)

我没有Sybase检查,但您可以试试这个:

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

答案 1 :(得分:-1)

我同意这里给出的答案是完全可以接受的,但是我觉得如果需要评估多个列,那么在WHERE子句中嵌套比较可能会变得有点麻烦和难以辨认。我不得不克服类似的问题,我发现以下技术非常有用(我已经调整它来解决上面列出的问题)。请注意,可以轻松调整外部查询中Total的评估,以增加或减少包含要评估的条件的列数:

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