Sql Server 2000:根据25列中的任何一列返回"true"或"false"为"true"

Bry*_*yan 1 sql t-sql sql-server bit-manipulation sql-server-2000

我必须创建一个查询几个不同列的查询,如果其中任何一个有1,我想返回true.

理想的输出将是:

ID:55
名称:John Doe
IsDealerType1:True
IsDealerType2:True
IsDealerType3:False
IsDealerType4:False
IsDealerType5:True

问题是,我有大约20个名为1a,1b,1c,1d等的列,而不是那5个经销商列.如果任何"1"列为真,那么IsDealerType1应该为真.

我试图避免在VB.NET代码中写一些内容来检查每一列,只是因为在SQL中应该很容易避免这种丑陋 - 如果我知道怎么做 - 但我不知道如何构造查询.我一直在努力......

SELECT id, 
      name, 
      (1a or 1b or 1c or 1d) as IsDealerType1, 
      (2a or 2b or 2c or 2d) as IsDealerType2 
where id = 55
Run Code Online (Sandbox Code Playgroud)

......但显然,我做得不对.

任何帮助表示赞赏.谢谢!

Joe*_*orn 10

我喜欢罗素,但我也会加上这个:

CASE WHEN 1 IN (1a,1b,1c,1d) THEN 1 ELSE 0 END As IsDealerType1
Run Code Online (Sandbox Code Playgroud)


Rus*_*een 5

CASE WHEN(1a + 1b + 1c + 1d)> 0 THEN 1 ELSE 0 END为IsDealerType1

  • 在SQL Server中,BIT类型没有"添加"运算符,因此1a + 1b将给出错误8117'操作数数据类型位对于添加运算符无效.'.这仅适用于1a ... 1d存储为数字(tinyint,smallint,int等),或者需要在每个1a..1d列上进行aditonal转换时. (2认同)