我有這樣一個觀點:從統一場在查看
的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