我有这些字段:
ISNULL(
dbo.Features.TheifAlarm,
0
) AS ExtraTheifAlarm,
ISNULL(
dbo.Features.FireAlarm,
0
) AS ExtraFireAlarm,
dbo.Features.TheifAlarm
和dbo.Features.FireAlarm
可以为bits
。但是我使用的是EntityFramework,它们在我的模型中可以为boolean
。我想将它们与OR
结合起来。
这是我的尝试:
ISNULL(
dbo.Features.TheifAlarm,
0
)
OR
ISNULL(
dbo.Features.FireAlarm,
0
)
但它没有用,我怎么能把这两列合并?提前致谢
答案 0 :(得分:2)
结合'您可以使用两个字段bitwise operators。
在你的情况下(在SELECT列表中):
SELECT (ISNULL(col1, 0) | ISNULL(col2, 0)) AS combinedCol FROM ...
或作为WHERE条件:
SELECT ... WHERE (ISNULL(col1, 0) = 1 OR ISNULL(col2, 0) = 1)
实际上你甚至不需要在WHERE条件中使用ISNULL()(当{1}}为空时,col1 = 1
的计算结果为FALSE(ok,NULL,但被视为FALSE):
SELECT ... WHERE (col1 = 1 OR col2 = 1)
编辑:只是添加一些替代方案:
简单添加
SELECT IIF((ISNULL(col1, 0) + ISNULL(col2, 0)) > 0, 1, 0)
CASE..WHEN结构(如iamdave所述)
SELECT CASE WHEN col1 = 1 THEN 1 ELSE IIF(col2 = 1, 1, 0) END
另一个案例......她
SELECT CASE WHEN (col1 = 1 OR col2 = 1) THEN 1 ELSE 0 END
或与IIF
SELECT IIF(col1 = 1 OR col2 = 1), 1, 0)
答案 1 :(得分:1)
我假设您想要返回true
,如果其中一个字段为true
?
如果是这样,您可以使用case
:
select case when ISNULL(dbo.Features.TheifAlarm,0) = 0 -- If the first is False
then ISNULL(dbo.Features.FireAlarm,0) -- Return the value of the second
else 1 -- Otherwise return True
end as EitherAlarmCheck
如果您要根据True
中的某个值过滤数据集,可以在OR
子句中使用where
:
select Cols
from Table
where ISNULL(dbo.Features.TheifAlarm,0) = 1
or ISNULL(dbo.Features.FireAlarm,0) = 1