Значение 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 является источником