2017-01-02 50 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