Поскольку вы извлекаете данные из одной и той же базы данных, просто сделайте объединение в базу данных. Пока вы работаете с ним, присвойте имена переменным при их создании.
create table bob as
select bob1
, bob2
, bob3
, bob1-bob2 as bob4
from connection to database
(select t1.bob1
, t2.bob2
, t3.bob3
from
(select count(*) as bob1
from DAVE.IMAGE_MSG_LOG
where RR_MSG_CODE = 'D' and RR_MSG_SEQ_NO = 1
) t1
, (select count(*) as bob2
from DAVE.IMAGE_MSG_LOG
where RR_MSG_CODE = 'R'
) t2
, (select count(*) as bob3
from DAVE.IMAGE_MSG_LOG
where RR_MSG_CODE = 'R' and RR_MSG_TIME_STAMP IS NULL
) t3
);
Поскольку вы генерируете эти подсчеты, запрашивая одну и ту же таблицу (набор данных), вы можете выполнить для нее один запрос, используя вместо этого CASE ГДЕ.
(select sum(case when (RR_MSG_CODE = 'D' and RR_MSG_SEQ_NO = 1) then 1
else 0 end) as bob1
, sum(case when (RR_MSG_CODE = 'R') then 1
else 0 end) as bob2
, sum(case when (RR_MSG_CODE = 'R' and RR_MSG_TIME_STAMP IS NULL) then 1
else 0 end) as bob3
from DAVE.IMAGE_MSG_LOG
)
Хотя вы можете добавить общие условия в предложение where, чтобы оно обрабатывало меньше записей.
where RR_MSG_CODE in ('R','D')