我必须达到最佳表现!
因此,我有一个表(my_table1),其中有3列:ID
,RID
(primary_key),VALUE1
。
我想在另一个表(my_table2)中创建一个新的boolean
列。
我解码了VALUE1
列,因此其输出可以是1
或NULL
。
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
解决此问题的最佳方法是什么?
答案 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
);
答案 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;
您可能很容易在联接到另一个表的上下文中使用此逻辑。