Как сделать логический столбец из другого столбца с условием - PullRequest
1 голос
/ 29 апреля 2019

Мне нужно достичь максимальной производительности!

Итак, у меня есть таблица (my_table1), в которой 3 столбца: ID, RID (primary_key), VALUE1.Я хочу создать новый столбец boolean в другой таблице (my_table2).

Я декодирую -d мой столбец 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 равно NULL, я хочу получить 0.

В этом конкретном случае вывод будет похож на - (my_table2):

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

Как лучше всего решить эту проблему?

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Вот ответ, который агрегирует VALUE1 на основе RID:

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

Вы можете достаточно легко использовать эту логику в контексте объединения с другой таблицей.

1 голос
/ 29 апреля 2019

Нет никакого логического типа столбца для таблиц в Oracle.Я думаю, что вы ищете целое число.

Вы можете использовать коррелированное обновление с запросом count из my_table1

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...