Я запрашиваю результаты из двух таблиц одновременно, что имеет повторяющийся шаблон.
select
abc, xyz
from
2010_Q1_result
inner join
2010_Q1_run
(далее идет 2010_Q2
... inner join 2010_Q2_run
до 2024_Q1_result inner join 2024_Q1_run
).
До сих пор я вручную менял год и квартал в запросе и вытаскивал результаты один за другим.
Как мне автоматизировать это для одного запроса?
Вы исправляете свой дизайн; у вас не должно быть новой таблицы за квартал, у вас должна быть 1 таблица со столбцом для года и квартала (или, возможно, только даты).
Я бы с удовольствием. Я не архитектор и не разработчик. Именно в таком виде он был передан нам от продавца уже много лет.
Исследовали ли вы концепцию динамического запроса? Тот, в котором вы создаете запрос с помощью математических вычислений и выполняете его с помощью Exec(). см. sqlshack.com/dynamic-sql-in-sql-server
То, что он предоставляется вам в таком формате, не означает, что вы не должны его впоследствии менять. Я предполагаю, что это не их дизайн базы данных? Если да, то пришло время сменить поставщика, это в корне ужасное дизайнерское решение.
Вы можете рассмотреть возможность использования один раз с помощью UNION:
select 2010 as year, 'q1' as quarter, abc, xyz
from
2010_Q1_result
inner join 2010_Q1_run
UNION ALL
select 2010 , 'q2' , abc, xyz
from
2010_Q2_result
inner join 2010_Q2_run
UNION ALL
select 2010 , 'q3', abc, xyz
from
2010_Q3_result
inner join 2010_Q3_run
UNION ALL
....
После написания это выдаст каждую запись со столбцами, обозначающими год и столбец. Вы могли бы выбросить всю эту гадость в представление, а затем просто SELECT * FROM my_view_that_I_made
, чтобы вам не приходилось писать это каждый раз, когда вы хотите запросить.
Что произойдет, когда нам понадобятся записи в следующем году, начиная с 2025 года? Нужно ли редактировать представление? К какому будущему мы можем разумно подготовиться?
это единовременная вещь: поставщик уйдет в конце этого года.
С такой структурой данных — скатертью дорога ;) Если бы это была долгосрочная задача, то возможным следующим шагом было бы написание процедуры (мы используем Python или что-то еще) для запроса метаданных для получения имен таблиц в область, чтобы затем создать и выполнить этот SQL на лету.
Пожалуйста, отметьте СУБД, которую вы используете, так как ответы могут существенно отличаться в зависимости от каждой.