PL / SQL Переход от выписки к регистру для расчета даты на основе настраиваемого календаря путем объединения двух таблиц - PullRequest
0 голосов
/ 26 февраля 2020

Я хотел бы заменить существующий длинный набор операторов CASE ... WHEN, чтобы создать поле даты на основе настраиваемого календаря в существующем сценарии.

SELECT 
F.SKU,
case
    when TRUNC (F.WEEK_ENDING) BETWEEN TO_DATE('01-04-2020') and TO_DATE('01-25-2020') then 'Jan 2020'
    when TRUNC (F.WEEK_ENDING) BETWEEN TO_DATE('02-01-2020') and TO_DATE('02-22-2020') then 'Feb 2020'
 end AS Period 
From data_table F;

Таблица календаря была создана с start_date, end_date, month, year и month_name. Calendar Table

Мой вопрос заключается в том, как связать эти таблицы, чтобы каждая дата F.Week_Ending проверялась по всем датам начала и окончания в календарной таблице, чтобы определить период?

Можно ли это сделать в запросе Select, мне нужно встроить этот скрипт в SAS в качестве Pro c SQL, поэтому не уверен, смогу ли я запустить там функцию?

Вся помощь приветствуется.

1 Ответ

1 голос
/ 26 февраля 2020

Похоже, вы ищете соединение:

select 
    f.sku,
    c.period_name
from data_table f
inner join calendar_table c 
    on f.week_ending between c.start_date and c.end_date

В зависимости от того, как вы определяете интервалы, вам может потребоваться следующее условие соединения:

    on trunc(f.week_ending) between c.start_date and c.end_date

Однако оставайтесь в помните, что такое выражение побеждает существующий индекс на (data_table(week_ending), так что это не очень хорошая практика. В идеале, вы должны использовать полуоткрытые интервалы в таблице календаря, ie определить , включая начальную дату и , исключая конечные даты, поэтому вы можете безопасно сделать:

    on f.week_ending >= c.start_date and f.week_ending < c.end_date
...