我有这样的观点:
var res = _.flatMap(array1, _.values)
MyTable和MyTable2中的Element1s是二进制(true或false)。我想要实现的是一个新字段,当至少有一个Element1为1时,该字段变为1。我怎样才能做到这一点?感谢。
答案 0 :(得分: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 . . .
这只是一个例子。目前尚不清楚" true"和"假"在您的数据中表示。
答案 1 :(得分: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 (...)
答案 2 :(得分:1)
Sql server支持bitwise operators,因此您可以这样写:
SELECT dbo.MyTable.Element1 | dbo.MyTable2.Element1
FROM MyTable
LEFT JOIN MyTable2 -- ON <condition>
答案 3 :(得分:1)
您可以使用bitwise operators。虽然这可能不如戈登的回答清楚。
更新以显示空值的影响:
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
结果:
+-------+-------+-----------+------------+------------+--------------+----------+
| 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链接:http://rextester.com/SPMNK25857