Я бы сделал это в двух отдельных операторах INSERT:
Первое условие («если сегодня понедельник») довольно простое:
insert into m (sent_day, item, price)
select current_date, item, price
from s
where exists (select *
from "time"
where cal_dt = current_date
and cal_day = 'Monday');
Я нахожу сохранение даты и день недели немного запутанный, поскольку день недели можно легко извлечь из дня. Для теста «если сегодня понедельник» вообще не нужно обращаться к таблице «времени» вообще:
insert into m (sent_day, item, price)
select current_date, item, price
from s
where extract(dow from current_date) = 1;
Вторая часть немного сложнее, но если я правильно понимаю, она должна быть примерно таким:
insert into m (sent_day, item, price)
select current_date, item, price
from s
where not exists (select *
from m
where m.sent_day in (select cal_dt
from "time" t
where cal_dt = current_date
and cal_day <> 'Monday'));
Если вы просто хотите один оператор INSERT, вы можете просто сделать UNION ALL между двумя выборами:
insert into m (sent_day, item, price)
select current_date, item, price
from s
where extract(dow from current_date) = 1
union all
select current_date, item, price
from s
where not exists (select *
from m
where m.sent_day in (select cal_dt
from "time" t
where cal_dt = current_date
and cal_day <> 'Monday'));