如何 select 2 个布尔列并检索 1 个布尔结果(两者都必须为 true = true)

How to select 2 boolean columns and retrieve 1 boolean result (both must be true = true)

在 SQL 服务器中我有多个 bit 列。如果产品 = False 或类别 = False,我想 return False。

我的测试代码:

declare @b0 bit
declare @b1 bit

set @b0 = 0
set @b1 = 1

select (@b0 and @b1)
select (@b0 + @b1)
select (@b0 = @b1)

但是3个都选择崩溃了。

我的实际代码片段:

select 
    c.bCatActive,    -- I want to dispose of this line.
    p.bProdActive,   -- I want to dispose of this line.
    (c.bCatActive and p.bProdActive) as IsActive  -- I want to retrieve this line but doesn't work.
from 
    Category c, Product p
where 
    p.ProductID = 999
    and c.CategoryID = p.CategoryID

当然我可以用两个 If-Then 来做到这一点,但我当前的查询是一个令人愉快的干净查询,所以我希望在一行中完成。

显式比较怎么样?

(case when c.bCatActive = 1 and p.bProdActive = 1 then 1 else 0 end) as IsActive

bits 不是 布尔值.

您还应该学习正确、明确、标准、可读的JOIN语法。

如果只有 0 和 1,那么试试这个:

select (c.bCatActive * p.bProdActive) as IsActive  
from Category c
   , Product p
where p.ProductID = 999
  and c.CategoryID = p.CategoryID

如果 c.bCatActive 和 p.bProdActive 的值为 1,它只会产生 1 作为 IsActive。如果其中任何一个为 0,它将 return 0。这是唯一的选择我现在可以想到,因为您不想使用 if 或 case。

你很接近,布尔值应该使用布尔逻辑:

declare @b0 bit
declare @b1 bit

set @b0 = 0
set @b1 = 0

select (@b0 & @b1)

对and使用&,对or

使用|