Значение Vlookup из диапазона значений

Я пытаюсь vlookup значение (rdate из таблицы 1) в диапазоне строк (таблица 2), и возвращает "да", если значение можно найти в таблице 2 (с конкретным набором критериев)

Таблица 1 - Продажи по дате

rdate           strcompanynodename          Sum of MnyDollar Cost         
    --------------------------------------------------------------
7/15/2017         Chadwick Supply Co.                5100
8/1/2017          Northeastern Milling               5600
6/3/2017          Ford Paper                         25320
12/1/2017         Northeastern Milling               6600
1/11/2010         Chadwick Supply Co.                300
7/4/2017          Ford Paper                         2

Таблица 2 - Даты воздействия

rdate start         rdate end                 strcompanynodename  
    --------------------------------------------------------------
7/1/2017          7/31/2018                   Chadwick Supply Co.   
7/2/2017          8/2/2018                    Northeastern Milling 
2/1/2016          3/31/2016                   Chadwick Supply Co.   
7/3/2017          8/3/2018                    Ford Paper    
3/2/2012         8/2/2013                    Northeastern Milling  

Я хочу суммировать стоимость mnydollar по имени strcompany из Таблицы 1, когда имя strcompanynodename совпадает со значением из таблицы 2, а дата из таблицы 1 попадает между началом rdate и концом rdate из таблицы 2 (когда компания соответствует).

Обновлено с ОЖИДАЕМЫМ РЕЗУЛЬТАТОМ

strcompanynodename          match? (between dates)                sum of mnydollarcost
--------------------------------------------------------------
Chadwick Supply Co.            yes                             5100
Northeastern Milling           yes                             5600
Ford                           yes                             2
Chadwick Supply Co.            no                              300
Northeastern Milling           no                              6600
Ford                           no                              25320 

2 ответа

Вы можете попробовать это:

    SELECT T1.strcompanynodename, T1.Mydollar, t1.rdate, t2.rdatestart, t2.rdateEnd,
case when t1.rdate between t2.rDateStart and t2.rdateEnd then 'Yes' 
Else 'No' end AS Flag
FROM SalesbyDate as T1
LEFT  JOIN ImpactedDates as T2 ON T1.strcompanynodename = T2.strcompanynodename 
AND T1.rDate BETWEEN T2.rDateStart AND T2.rDateEnd
Order by Flag desc

Вы должны быть в состоянии получить ожидаемый результат, используя запрос ниже

select distinct t1.strcompanynodename , t1.dollar, case when t1.rdate between t2.start and t2.end then "Yes" else "No" end as flag from
table1 as t1 left outer join table2 as t2
on t1.strcompanynodename = t2.strcompanynodename
order by flag

Объяснение: Оператор case используется для создания флага Да или Нет. Ключевым моментом здесь является использование LEFT OUTER JOIN (Читайте о объединениях на Google). И чтобы избежать дублирования записей, я добавил отдельное, которое будет удалять дубликаты из-за нескольких записей в таблице 2, так как таблица 1 является источником

Скриншот

Другие вопросы по тегам