2016-01-19 3 views
0

У меня есть запрос MS Access (созданный с помощью SQL), который подсчитывает значения значений, отличных от NULL, в столбце даты в таблице состояния оборудования. В таблице содержится все оборудование для конкретного производственного предприятия. Запрос также учитывает общее оборудование, при этом наши значения не имеют значения NULL. В общей сложности существует 12 различных заводов, каждый из которых имеет свой собственный идентичный набор таблиц доступа. Мне нужно создать консолидированный SQL-запрос, который создает суммирование каждого из счетчиков в счетчик-мастер для всех заводов.SQL-запрос суммирования SQL для нескольких наборов таблиц доступа

Структура таблицы состояния, названный «_review_status» является:

equip_number, text 
review_a_analysis, date 
review_b_analysis, date 
review_c_analysis, date 
review_d_analysis, date 
review_e_analysis, date 
review_f_analysis, date 
review_g_analysis, date 

Результаты рабочего запроса (по одной таблицы) выглядит следующим образом.

a b c d e f g equip_count 
17 31 0 94 13 12 44 1249 

Новые результаты должны выглядеть так же, как выше, за исключением того, что число будет все больше, так как запрос смотрит на всех 12 наборов таблиц.

Здесь работает один стол запрос:

SELECT 
Count(dept1_review_status.review_a_analysis) AS a, 
Count(dept1_review_status.review_b_analysis) AS b, 
Count(dept1_review_status.review_c_analysis) AS c, 
Count(dept1_review_status.review_d_analysis) AS d, 
Count(dept1_review_status.review_e_analysis) AS e, 
Count(dept1_review_status.review_f_analysis) AS f, 
Count(dept1_review_status.review_g_analysis) AS g, 
Count(dept1_equipment.dept1_equip_number) AS equip_count 
FROM dept1_equipment 
LEFT JOIN dept1_review_status 
ON dept1_equipment.dept1_equip_number = 
dept1_review_status.dept1_equip_number; 

Джойн на столе dept1_equipment используется для получения полного подсчета всего оборудования в каждом отделе.

Большое спасибо.

Боб

+0

Получил большую помощь форма @sagi на аналогичной SQL вызов на прошлой неделе. В случае, если его решение поможет в навигации по этому пути, см. [Link] http://stackoverflow.com/questions/34836370/aggregate-sql-query-across-multiple-tables для получения подробных сведений об этом решении. – bcrimmins

ответ

1

Рассматривают работает накидной запрос всех 12 групп по совокупности запросов, а затем запустить другой конечный совокупный запрос с использованием сохраненного накидной запрос:

UNION

SELECT 
    Count(dept1_review_status.review_a_analysis) AS a, 
    Count(dept1_review_status.review_b_analysis) AS b, 
    Count(dept1_review_status.review_c_analysis) AS c, 
    Count(dept1_review_status.review_d_analysis) AS d, 
    Count(dept1_review_status.review_e_analysis) AS e, 
    Count(dept1_review_status.review_f_analysis) AS f, 
    Count(dept1_review_status.review_g_analysis) AS g, 
    Count(dept1_equipment.dept1_equip_number) AS equip_count 
FROM dept1_equipment LEFT JOIN dept1_review_status 
ON dept1_equipment.dept1_equip_number = dept1_review_status.dept1_equip_number; 

UNION ALL 

SELECT 
    Count(dept2_review_status.review_a_analysis) AS a, 
    Count(dept2_review_status.review_b_analysis) AS b, 
    Count(dept2_review_status.review_c_analysis) AS c, 
    Count(dept2_review_status.review_d_analysis) AS d, 
    Count(dept2_review_status.review_e_analysis) AS e, 
    Count(dept2_review_status.review_f_analysis) AS f, 
    Count(dept2_review_status.review_g_analysis) AS g, 
    Count(dept2_equipment.dept2_equip_number) AS equip_count 
FROM dept2_equipment LEFT JOIN dept2_review_status 
ON dept2_equipment.dept2_equip_number = dept2_review_status.dept2_equip_number; 

UNION ALL 

SELECT 
    Count(dept3_review_status.review_a_analysis) AS a, 
    Count(dept3_review_status.review_b_analysis) AS b, 
    Count(dept3_review_status.review_c_analysis) AS c, 
    Count(dept3_review_status.review_d_analysis) AS d, 
    Count(dept3_review_status.review_e_analysis) AS e, 
    Count(dept3_review_status.review_f_analysis) AS f, 
    Count(dept3_review_status.review_g_analysis) AS g, 
    Count(dept3_equipment.dept3_equip_number) AS equip_count 
FROM dept3_equipment LEFT JOIN dept3_review_status 
ON dept3_equipment.dept3_equip_number = dept3_review_status.dept3_equip_number; 

...other 9 tables... 

FINAL

SELECT Sum(unionqry.a), 
     Sum(unionqry.b), 
     Sum(unionqry.c), 
     Sum(unionqry.d), 
     Sum(unionqry.e), 
     Sum(unionqry.f), 
     Sum(unionqry.g), 
     Sum(unionqry.h), 
     Sum(unionqry.equip_count) 
FROM unionqry 

В качестве альтернативы, вы можете включить все в одном запросе, если MS Access позволяет в зависимости от сложности:

SELECT Sum(unionqry.a), 
     Sum(unionqry.b), 
     Sum(unionqry.c), 
     Sum(unionqry.d), 
     Sum(unionqry.e), 
     Sum(unionqry.f), 
     Sum(unionqry.g), 
     Sum(unionqry.h), 
     Sum(unionqry.equip_count) 
FROM (...above union query)... As unionqry 
+0

Спасибо, @parfait. Это имеет смысл. Запрос UNION работал сам по себе, т. Е. Со всеми 12 отделами. Однако запрос SUM генерировал ошибку, когда я пытался включить все в один запрос ... который я предпочитаю. Оказывается, проблема с точкой с запятой в конце каждой статьи UNION. Поэтому я удалил их, и он отлично поработал. Спасибо за отличное решение! – bcrimmins

+0

Отлично! Пожалуйста, примите, чтобы подтвердить разрешение (вы получили баллы, сделав это). В самом деле, не используйте точки с запятой в подзапросе производной таблицы. Кроме того, как я прокомментировал в другом вопросе, постарайтесь не использовать идентичные таблицы. Вы можете подумать, что вы более организовываетесь, разделяя ваши отделы, но меньше объектов в реляционной модели является оптимальным. Сделав это, вам не понадобится ни один союзный запрос. – Parfait

+0

Я согласен с общей теорией минимизации объектов, но в этом проекте есть бизнес-соображения, которые приводят к исключению из правила здесь. Короче говоря, каждый «отдел» на самом деле не является отделом, а является независимым бизнес-подразделением с высокой вероятностью быть выделенным из материнской компании, принимая данные с ним ... в это время он станет минимизированной схемой. Итак ... как мне «принять подтверждение»? – bcrimmins

Смежные вопросы