SQL условное соединение с подзапросом - PullRequest
0 голосов
/ 06 мая 2020

Я не понимаю, почему этот код не работает. У меня есть соединение, для которого требуется другое условие соединения в зависимости от результата подзапроса.

Когда термин 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...