2017-01-02 45 views
0

我有这样一个观点:从统一场在查看

的MyTable
dbo.MyTable.Element1, 
dbo.MyTable2.Element1 
FROM MyTable LEFT OUTER JOIN MyTable2 

Element1s和MyTable2是二进制(true或false)。我想要达到的是一个新的领域,当Element1中至少有一个是1时,它将变成1。我怎样才能做到这一点?谢谢。

+2

提示:'CASE' /'和'。另外,SQL Server没有“二进制”数据类型。什么是实际的数据类型?样本数据和期望的结果总是有帮助的。 –

+0

@GordonLinoff实际数据类型是位, – jason

回答

2

的典型方法做你想要使用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 . . . 

这仅仅是一个例子。目前还不清楚您的数据中“真”和“假”是如何表现的。

+0

数据类型是位,所以它们是一个或零 – jason

1

SQL Server的支持bitwise operators,所以你可以写这样的:

SELECT dbo.MyTable.Element1 | dbo.MyTable2.Element1 
FROM MyTable 
LEFT JOIN MyTable2 -- ON <condition> 
2

对于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 (...) 
1

你可以使用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