我有这样一个观点:从统一场在查看
的MyTabledbo.MyTable.Element1,
dbo.MyTable2.Element1
FROM MyTable LEFT OUTER JOIN MyTable2
Element1s和MyTable2是二进制(true或false)。我想要达到的是一个新的领域,当Element1中至少有一个是1时,它将变成1。我怎样才能做到这一点?谢谢。
我有这样一个观点:从统一场在查看
的MyTabledbo.MyTable.Element1,
dbo.MyTable2.Element1
FROM MyTable LEFT OUTER JOIN MyTable2
Element1s和MyTable2是二进制(true或false)。我想要达到的是一个新的领域,当Element1中至少有一个是1时,它将变成1。我怎样才能做到这一点?谢谢。
的典型方法做你想要使用case
什么:
SELECT (CASE WHEN t.Element1 = 'true' OR t2.Element1 = 'true'
THEN 'true' ELSE 'false'
END)
FROM MyTable t LEFT OUTER JOIN
MyTable2 t2
ON . . .
这仅仅是一个例子。目前还不清楚您的数据中“真”和“假”是如何表现的。
数据类型是位,所以它们是一个或零 – jason
SQL Server的支持bitwise operators,所以你可以写这样的:
SELECT dbo.MyTable.Element1 | dbo.MyTable2.Element1
FROM MyTable
LEFT JOIN MyTable2 -- ON <condition>
对于SQL Server,它可能是这样的:
select case
when t1.Element1 = 1 or t2.Element1 = 1 then 1
else 0 end
from dbo.MyTable.Element1 t1
left join MyTable2 dbo.MyTable.Element2 t2 on (...)
你可以使用bitwise operators。虽然这可能不如戈登的答案清楚。
更新,以显示空值的影响:
+-------+-------+-----------+------------+------------+--------------+----------+
| a | b | bitwiseOr | bitwiseAnd | bitwiseXor | isnullNullif | caseWhen |
+-------+-------+-----------+------------+------------+--------------+----------+
| False | False | False | False | False | False | False |
| True | False | True | False | True | True | True |
| False | True | True | False | True | True | True |
| True | True | True | True | False | True | True |
| NULL | NULL | NULL | NULL | NULL | False | False |
| NULL | False | NULL | NULL | NULL | False | False |
| NULL | True | NULL | NULL | NULL | True | True |
| False | NULL | NULL | NULL | NULL | False | False |
| True | NULL | NULL | NULL | NULL | True | True |
+-------+-------+-----------+------------+------------+--------------+----------+
rextester链接:在
create table bitTest (a bit null, b bit null)
insert into bitTest values
(0,0), (1,0), (0,1) ,(1,1)
, (null,null), (null,0), (null,1)
, (0,null), (1,null)
select
a
, b
, bitwiseOr = a|b
, bitwiseAnd = a&b
, bitwiseXor = a^b
, isnullNullif = isnull(nullif(a,0),isnull(b,0))
, caseWhen = convert(bit,case when a=1 or b=1 then 1 else 0 end)
from bitTest
结果http://rextester.com/SPMNK25857
提示:'CASE' /'和'。另外,SQL Server没有“二进制”数据类型。什么是实际的数据类型?样本数据和期望的结果总是有帮助的。 –
@GordonLinoff实际数据类型是位, – jason