Sql 选择包含特定值的多列

Sql 选择包含特定值的多列,sql,sql-server,Sql,Sql Server,我有一个大表,我在其中选择了一些id在(321900123)中的行 我想回去 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 col

我有一个大表,我在其中选择了一些id在(321900123)中的行

我想回去 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

一种方法是将两列相加,因为它们是数值:

select col1+col3 as selected
  from tab
where id in (321,900,123)
 and col1+col3>=1
但这里面确实有一些假设。根据您的要求,它可能适合您。(遗憾的是,sql server不允许在
where
子句中使用列别名,因为它最好读作
并选择>=1

另一种方法是执行以下操作:

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

但同样取决于您的具体要求

您是否尝试将命令连接为字符串和
EXEC(@command)
?因此我将使用相同的命令?@waterling-您能告诉我这是一个玩具项目还是来自某个公司的数据库吗?我想知道为什么会有人想提出这样的疑问。顺便说一句,你为什么认为这很慢?我只是想设置一些权限。此表告诉我id是否对每个列都有权限:)这很慢,因为您正在执行单独的select语句并组合结果,而不是执行一个。您希望从查询中获得什么输出?您提供的查询将包含零行或一行,其中一列名为
col1
,其中包含
1
。无论您在表中输入了什么数据,该查询都不会产生其他结果。我认为这不是你想要的。
select 1 
from tab
where id in (321,900,123)
  and ( col1=1
    or col3=1 )