MS ACCESS SQL группировка и подсчет нулей - PullRequest
1 голос
/ 20 февраля 2020

Нужна помощь в создании оператора SQL для следующего:

В основном, у нас есть супервизоры, которые go проводят тестирование сотрудников. Эти тесты записываются онлайн и экспортируются в базу данных доступа.

Тесты сгруппированы по категориям. Так, например, тестовые # 101, 102 и 103 сгруппированы в категории 1, тестовые # 112, 113 и 114 сгруппированы в категорию 2 и так далее.

Каждый руководитель должен сделать определенный номер в каждой категории.

Существует таблица, содержащая информацию о каждом номере теста и категории, в которую они попадают, и другая таблица, содержащая сведения о категории.

Мне нужен отчет, чтобы показать, сколько тестов в супервизорах каждой категории было выполнено каждый месяц, но мне нужно показать счетчик 0, если тесты не были введены в течение определенного месяца.

Мне удалось получить значения, используя vba, циклически проходя по каждой категории, затем повторяя по каждому тестовому номеру, затем подсчитывая каждый тестовый номер, который был завершен, но это занимает почти 30 секунд для каждого супервизора (слишком долго с более чем 500 руководители).

Я надеюсь, что я правильно объясняю это, и я надеюсь, что у вас может быть простое решение для этого.

Пример отчета, который необходимо создать

Supervisor: Harvey Sample ( 0084568 )

01/20     Category 1:  5 Tests
01/20     Category 2:  0 Tests
01/20     Category 3:  8 Tests
01/20     Category 4:  2 Tests
01/20     Category 5:  4 Tests

02/20     Category 1:  2 Tests
02/20     Category 2:  6 Tests
02/20     Category 3:  3 Tests
02/20     Category 4:  0 Tests
02/20     Category 5:  5 Tests

Завершенные тесты хранятся в этой таблице

SPARTN_Livefeed1
Sheet ID         Date          Test Number          Supervisor ID
OB-1234          1/1/2020         101                 806855
OB-5678          1/1/2020         101                 806855
OB-9877          1/1/2020         112                 806855
OB-5644          1/1/2020         123                 806855
OB-5644          1/1/2020         123                 806855
REF_TestCatalog_tbl
ID          TestId          TestDesc          TestCategory          StartDate          EdnDate
1             101            Stopping              1                 12/1/2019
2             112            Delay                 2                 12/1/2019
3             123            Documents             3                 12/1/2019
4             134            Radio                 4                 12/1/2019




REF_TestCategory_tbl
ID        CategoryID          CategoryDesc          StartDate          EndDate   
1             1               Signals               12/1/2019
2             2               Speed                 12/1/2019
3             3               Equipment             12/1/2019
4             4               Operation             12/1/2019



Expected Results
CategoryID          TestofficerID          Actuals          ComplianceMonth
1                   806855                 2                 1/1/2020
2                   806855                 1                 1/1/2020
3                   806855                 3                 1/1/2020
4                   806855                 0                 1/1/2020

1 Ответ

0 голосов
/ 20 февраля 2020
declare @supervisor varchar[50];
set @supervisor ='Harvey Sample'

select date, 'Category 1', (select count(*) from supervisor_tests sc where st.date = sc.date and sc.category = 'Category 1' and sc.supervisor = @supervisor) 
from supervisor_tests st where supervisor = @supervisor
union
select date, 'Category 2', (select count(*) from supervisor_tests sc where st.date = sc.date and sc.category = 'Category 2' and sc.supervisor = @supervisor) 
from supervisor_tests st where supervisor = @supervisor
order by date

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...