如何从另一个带有条件的列中创建一个布尔列

时间:2019-04-29 07:13:04

标签: sql oracle

我必须达到最佳表现!

因此,我有一个表(my_table1),其中有3列:IDRID(primary_key),VALUE1。 我想在另一个表(my_table2)中创建一个新的boolean列。

我解码了VALUE1列,因此其输出可以是1NULL

 RID    |   ID   | VALUE1
--------|--------|--------
 132501 |  1001  |   1
 132501 |  1002  |   
 132501 |  1003  |   
 132501 |  1004  |   1
 132501 |  1005  |   
 132501 |  1006  |   1

如果VALUE1列的所有值均为1,我想获取1。 如果VALUE1列的 ANY 值为NULL,我想获取0

在这种情况下,输出类似于-(my_table2):

 RID_2  |ID_TBL_2| NEW_BOOL_COL
--------|--------|--------
 132501 |  3214  |   0

解决此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

Oracle中没有表的布尔列类型。我认为您正在寻找整数。

您可以对my_table1中的count查询使用关联更新

update my_table2 t2 set NEW_BOOL_COL = 
( select 
  case when count( case when value1 = 1 then 1 end ) = 
    count(*) then 1 else 0 end 
from my_table1 t1 where t1.rid = t2.rid_2 
group by t1.rid
);

DEMO

答案 1 :(得分:1)

以下是根据VALUE1汇总RID的答案:

SELECT
    RID,
    CASE WHEN COUNT(VALUE1) = COUNT(*) THEN 1 ELSE 0 END AS NEW_BOOL_COL
FROM my_table1
GROUP BY RID;

您可能很容易在联接到另一个表的上下文中使用此逻辑。