选择包含特定值的多个列

时间:2014-06-19 04:05:33

标签: sql sql-server

我有一张大表,我在其中选择了一些id为(321,900,123)

的行
id | col1 | col2 | col3
-----------------------
321| 1    |  0    | 0
900| 0    |  0    | 0
123| 0    |  0    | 1

我想回来 col1和col3因为它们包含1.如何? 我在select语句上应用union的方法很慢。肯定有更好的办法。我将来可能会有更多列,所以这种硬编码并不好。

    select col1 from table where id in (321,900,123) and col1=1 
union select col2 from table where id in (321,900,123) and col2=1 
union select col3 from table where id in (321,900,123) and col3=1

1 个答案:

答案 0 :(得分:0)

解决这个问题的一种方法是将数字值相加:

select col1+col3 as selected
  from tab
where id in (321,900,123)
 and col1+col3>=1

但这确实有一些内置的假设。根据您的要求,它可能适合您。 Fiddle。 (Pity sql server不允许在where子句中使用列别名,因为它会更好地读取and selected>=1。)

另一种方法是做一些事情:

select 1 
from tab
where id in (321,900,123)
  and ( col1=1
    or col3=1 )

但又取决于你的确切要求