假设我有以下样式表,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
感谢。
答案 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