统一视图中的字段

时间:2017-01-02 13:41:02

标签: sql sql-server

我有这样的观点:

var res = _.flatMap(array1, _.values)

MyTable和MyTable2中的Element1s是二进制(true或false)。我想要实现的是一个新字段,当至少有一个Element1为1时,该字段变为1。我怎样才能做到这一点?感谢。

4 个答案:

答案 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