У меня есть две таблицы, с которыми я работаю. Первый один QuarterDateMapping
содержит информацию о датах начала и окончания кварталов:Как выбрать строки на основе вывода другого запроса?
GregorianQuarterName | GregorianMonthBeginDate | GregorianMonthEndDate
где GregorianQuarterName
представляет собой nvarchar
со строкой имен квартал в формате «FY% y- Q% Q» и GregorianMonthBeginDate
и GregorianMonthEndDate
будучи datetime
объектов. Вторая таблица, QuarterlyRevenueData
, содержит информации требуется запрашивать и имеет следующий формат:
Fiscal_Quarter | Product | Revenue
где Fiscal_Quarter
имеет тот же формат, как GregorianQuarterName
. Я хочу только возвращать значения из второй таблицы, которые находятся на или до текущего квартала. Я понял, как вернуть текущую четверть из первой таблицы с помощью:
SELECT QDMap.GregorianQuarterName AS most_recent_quarter
FROM QuarterDateMapping QDMap
WHERE QDMap.GregorianMonthBeginDate <= GetDate()
AND QDMap.GregorianMonthEndDate >= GetDate()
успешно возвращает текущий квартал (FY17-Q1). Трудность, с которой я сталкиваюсь, заключается в попытке выяснить, как использовать этот вывод для запроса второй таблицы. Я пробовал:
;WITH QuarterData As
(
SELECT QDMap.GregorianQuarterName AS most_recent_quarter
FROM QuarterDateMapping QDMap
WHERE QDMap.GregorianMonthBeginDate <= GetDate()
AND QDMap.GregorianMonthEndDate >= GetDate()
)
SELECT * FROM QuarterlyRevenueData revdata
WHERE revdata.Fiscal_Quarter <= QuarterData.most_recent_quarter
Однако это дает мне ошибку:
Msg 4104, Level 16, State 1, Line 9
The multi-part identifier "QuarterData.most_recent_quarter" could not be bound.
Когда я запускаю тот же запрос, как указано выше, но с квартале жестко закодированного:
SELECT * FROM QuarterlyRevenueData revdata
WHERE revdata.Fiscal_Quarter <= 'FY17-Q1'
Он работает как и ожидалось, и возвращает данные, которые я хочу, но я хочу, чтобы мой запрос мог автоматически обновляться.
Благодарим за любую помощь. Дайте мне знать, если мой вопрос нуждается в дополнительной информации или улучшенном форматировании, это мой первый SQL-запрос на SO.
Это в основном работает, но мне нужно удалить 'QDM.GregorianQuarterName, QDM.GregorianMonthBeginDate, QDM.GregorianMonthEndDate,' из оператора SELECT', чтобы получить тот же самый вывод данных, что и фильтрация таблицы. Как и вывод, три дополнительных столбца с данными для текущего квартала от 'QuarterDateMapping' повторяются снова и снова в каждой строке. – Barker