Я не понимаю, почему этот код не работает. У меня есть соединение, для которого требуется другое условие соединения в зависимости от результата подзапроса.
Когда термин date имеет значение null, я хочу, чтобы это было после оператора and: and vs.term_date имеет значение null Когда термин date не равен нулю, я хочу, чтобы подзапрос, приведенный ниже, шел после оператора and. Мне нужно присоединиться к максимальной дате вступления в силу: vs.eff_date = (subquery)
Я понимаю, что этот код беспорядочный, но мне нужно агрегировать с подзапросом, поскольку возвращается несколько строк, а мне нужна только одна . (но открыты для других решений)
select *
From loc
inner join VendorSite vs
on loc.Record_Number = vs.SITE_NO
and --conditional join
case
when
(
case
when --if term date is null i want this after "and"
(select top 1 TERM_DATE
from VendorSite vs2
where vs2.SITE_NO = vs.SITE_NO
order by TERM_DATE asc) is null
then 1
else 0
end
) = 1
then vs.term_date is null
else --when term_date isn't null use max eff date
vs.eff_date =
(select max(eff_date)
from VendorSite vs2
where vs2.SITE_NO = loc.Record_Number)
end
Пример: из приведенного ниже набора данных я хотел бы видеть только строку, в которой term_date имеет значение null.
site_no eff_date term_date
13588 2007-01-01 00:00:00.000 NULL
13588 2007-03-01 00:00:00.000 2007-11-09 00:00:00.000