Запрос MS Access через несколько таблиц, показывающий уменьшенные результаты - PullRequest
0 голосов
/ 05 августа 2020

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

Employee Table
Employee     Status
Employee 1   Active
Employee 2   Inactive
Employee 3   Active

FICO Records
Employee     Week      Score
Employee 1   7/19/20   150
Employee 2   7/19/20   150   
Employee 1   7/12/20   250
Employee 2   7/12/20   350
Employee 3   7/12/20   200

Scorecard Records
Employee 1   7/19/20   Great
Employee 2   7/19/20   Great
Employee 3   7/19/20   Great
Employee 1   7/12/20   Great
Employee 2   7/12/20   Great
Employee 3   7/12/20   Great

Ожидаемый результат: в таблице перечислены ВСЕ активные сотрудники и отображаются результаты для параметра week, установленного на 19.07.20 в этом примере. Сотрудник 2 отбрасывается, поскольку он неактивен. Сотрудник 1 показывает результаты в обоих столбцах, поскольку у него есть записи в обеих таблицах. Сотрудник 3 показывает результаты только в Scorecard, так как у него не было записи FICO.

Employee     Week      FICO     Scorecard
Employee 1   7/19/20   150      Great
Employee 3   7/19/20            Great

Это результаты, которые я получаю сейчас

Employee     Week      FICO     Scorecard
Employee 1   7/19/20   150      Great

Вот код, который я создал с помощью инструмент создания запросов в MS Access. Я пробовал использовать левое соединение, и это не меняет результатов. Помогите пожалуйста.

PARAMETERS [Week Date] DateTime;
SELECT
   [DA Master].[DA Name],
   [DA Master].Status,
   [DA AMZL Scorecard].[Overall Tier],
   [DA Fico].Week,
   [DA Fico].FICO 
FROM
   (
      [DA Master] 
      INNER JOIN
         [DA AMZL Scorecard] 
         ON [DA Master].ID = [DA AMZL Scorecard].DA
   )
   INNER JOIN
      [DA Fico] 
      ON [DA Master].ID = [DA Fico].DA 
WHERE
   (
(([DA Master].Status) = "Active") 
      AND 
      (
([DA Fico].Week) = [Week Date]
      )
   )
ORDER BY
   [DA Master].[DA Name];

1 Ответ

0 голосов
/ 06 августа 2020

У вас есть таблица всех дат недели? Если нет, запрос UNION может выполнить sh это и создать набор данных для всех пар сотрудников / недель.

SELECT Employee, Week FROM Employees, FICO 
UNION SELECT Employee, Week FROM Employees, Scorecard;

Может включать любые другие интересующие поля из таблицы Employees или включать таблицу Employees в последующие запросы.

Теперь используйте этот запрос в другом запросе, который объединяется с таблицами FICO и Scorecard в полях Employee и Week.

Каждый SELECT является декартовым запросом продукта. Имейте в виду, что эти типы запросов могут выполняться медленно.

В противном случае либо FICO, либо Scorecard должны были бы иметь запись для каждой пары «сотрудник / неделя», чтобы они могли действовать как «основная» таблица, которую могли бы присоединиться к.

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