Рассчитать процент сертифицированных менеджеров - PullRequest
0 голосов
/ 23 июня 2011

Я задавал похожий вопрос несколько недель назад, но теперь требования изменились.

С учетом следующих таблиц: http://www.maroisconsulting.com/Temp/query.png

Мне нужно создать запрос, который возвращает процент сотрудников, являющихся менеджерами (Titles.IsManager) и имеющих дату в поле «Сертифицировано» (Employees.Certific). Результаты должны быть сгруппированы по группам в каждом магазине.

Пока у меня есть это:

SELECT d.GroupId, 
       Sum(d.cert_complete) AS SumOfcert_complete, 
       Count(d.cert_complete) AS CountOfcert_complete
FROM (SELECT DISTINCT
        s.GroupId,
        e.EmployeeID,
        IIf(e.Certified Is Null,0,1) AS cert_complete
    FROM
        ((Stores AS s
        INNER JOIN EmployeeStores AS es ON s.StoreId = es.StoreId)
        INNER JOIN Employees AS e ON es.EmployeeId = e.EmployeeID)
        INNER JOIN Titles AS t ON e.TitleId = t.TitleId
    )  AS d
WHERE t.IsManager
GROUP BY d.GroupId;

А потом этот

SELECT q.GroupId, 
      (SumOfcert_complete/CountOfcert_complete)*100 AS percent_certified, 
      Groups.GroupName
FROM qryGroupCert_base AS q 
INNER JOIN Groups ON q.GroupId = Groups.GroupId;

Вы можете видеть в первом запросе, где я добавил таблицу Titles.

1) Мне предлагается IsManager, хотя я не знаю, почему 2) Возвращающиеся результаты не отличаются от того, что было до того, как я добавил IsManager

Кто-нибудь видит, что здесь не так?

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

Ответы [ 2 ]

0 голосов
/ 23 июня 2011

В вашем первом запросе у вас есть этот подзапрос, который включает заголовки с псевдонимом "t":

(SELECT DISTINCT
    s.GroupId,
    e.EmployeeID,
    IIf(e.Certified Is Null,0,1) AS cert_complete
FROM
    ((Stores AS s
    INNER JOIN EmployeeStores AS es ON s.StoreId = es.StoreId)
    INNER JOIN Employees AS e ON es.EmployeeId = e.EmployeeID)
    INNER JOIN Titles AS t ON e.TitleId = t.TitleId
)  AS d

Затем, после определения подзапроса, у вас есть предложение WHERE:

WHERE t.IsManager

Проблема в том, что псевдоним "t" и столбец IsManager существуют только в подзапросе -> они неизвестны внешнему (родительскому) запросу.В тех случаях, когда ядро ​​базы данных Access обнаруживает что-то, что не распознается как имя объекта, функцию, буквенное значение или ключевое слово SQL, он думает, что что-то должно быть параметром ... поэтому появляется окно ввода с просьбой предоставитьзначение для параметра (IsManager).

Я думаю, вам следует переместить предложение WHERE в определение подзапроса.

SELECT d.GroupId, 
       Sum(d.cert_complete) AS SumOfcert_complete, 
       Count(d.cert_complete) AS CountOfcert_complete
FROM [SELECT DISTINCT
        s.GroupId,
        e.EmployeeID,
        IIf(e.Certified Is Null,0,1) AS cert_complete
    FROM
        ((Stores AS s
        INNER JOIN EmployeeStores AS es ON s.StoreId = es.StoreId)
        INNER JOIN Employees AS e ON es.EmployeeId = e.EmployeeID)
        INNER JOIN Titles AS t ON e.TitleId = t.TitleId
        WHERE t.IsManager = True
    ]. AS d
GROUP BY d.GroupId;
0 голосов
/ 23 июня 2011

Возможно, вам нужно указать критерии для t.IsManager, например t.IsManager = TRUE.Если предложение where не имеет значения, чтобы установить его равным, Access, вероятно, не разрешает его в фактическом столбце, но считает, что это параметр запроса.

...