Несколько повторяющихся таблиц

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

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).

До сих пор я вручную менял год и квартал в запросе и вытаскивал результаты один за другим.

Как мне автоматизировать это для одного запроса?

Пожалуйста, отметьте СУБД, которую вы используете, так как ответы могут существенно отличаться в зависимости от каждой.

esqew 15.05.2024 19:17

Вы исправляете свой дизайн; у вас не должно быть новой таблицы за квартал, у вас должна быть 1 таблица со столбцом для года и квартала (или, возможно, только даты).

Thom A 15.05.2024 19:25

Я бы с удовольствием. Я не архитектор и не разработчик. Именно в таком виде он был передан нам от продавца уже много лет.

suji 15.05.2024 19:29

Исследовали ли вы концепцию динамического запроса? Тот, в котором вы создаете запрос с помощью математических вычислений и выполняете его с помощью Exec(). см. sqlshack.com/dynamic-sql-in-sql-server

Bart McEndree 15.05.2024 19:29

То, что он предоставляется вам в таком формате, не означает, что вы не должны его впоследствии менять. Я предполагаю, что это не их дизайн базы данных? Если да, то пришло время сменить поставщика, это в корне ужасное дизайнерское решение.

Thom A 15.05.2024 19:36
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
5
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете рассмотреть возможность использования один раз с помощью 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 года? Нужно ли редактировать представление? К какому будущему мы можем разумно подготовиться?

Bart McEndree 15.05.2024 19:52

это единовременная вещь: поставщик уйдет в конце этого года.

suji 15.05.2024 19:54

С такой структурой данных — скатертью дорога ;) Если бы это была долгосрочная задача, то возможным следующим шагом было бы написание процедуры (мы используем Python или что-то еще) для запроса метаданных для получения имен таблиц в область, чтобы затем создать и выполнить этот SQL на лету.

JNevill 15.05.2024 21:52

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

SQL восстанавливает одну таблицу из резервной базы данных. Столбцы имеют метку времени, и я должен использовать IDENTITY_INSERT
SQL-скрипт, который будет корректировать значение следующей строки, когда будет обнаружено отрицательное значение
Стратегия TableGenerator (таблица идентификаторов) в ядре сущностей + SQL Server
Возьмите данные из записи интереса, когда условие или критерии фильтра совпадают, и игнорируйте записи между текущей строкой и выбранной записью (строкой интереса)
Добавьте значение по умолчанию в поле при использовании INSERT и NOT EXISTS
Рассчитайте дату окончания строк раздела, используя дату начала следующего раздела
Самое большое значение в базе данных
Возвращать результаты, если количество соответствует количеству записей
Сравнение столбцов между строками одной и той же группы, используемой в предложении Partition By
Получить все столбцы в таблице с примером набора результатов

Похожие вопросы

Переменная объекта VBA не распознается
SQL восстанавливает одну таблицу из резервной базы данных. Столбцы имеют метку времени, и я должен использовать IDENTITY_INSERT
Снежинка – SQL-запрос – Войти в систему Выйти — Общее количество отработанных часов
Возьмите данные из записи интереса, когда условие или критерии фильтра совпадают, и игнорируйте записи между текущей строкой и выбранной записью (строкой интереса)
Как использовать оператор IF и локальные переменные в хранимых процедурах
Добавьте значение по умолчанию в поле при использовании INSERT и NOT EXISTS
Создайте объект json из нескольких столбцов программно в presto/trino/aws athena
Informix AcceptStatement выдает ошибку: «Ошибка процесса преобразования символов в число» при добавлении предложения LIMIT в запрос
Рассчитайте дату окончания строк раздела, используя дату начала следующего раздела
Оператор ЕСТЬ ВЕРНО