/ / Oblicz procent certyfikowanych menedżerów - sql, ms-access, ms-access-2007

Oblicz procent certyfikowanych menedżerów - sql, ms-access, ms-access-2007

Zadałem podobne pytanie kilka tygodni temu, ale teraz wymagania się zmieniły.

Biorąc pod uwagę następujące tabele: http://www.maroisconsulting.com/Temp/query.png

Muszę utworzyć zapytanie, które zwracaodsetek pracowników, którzy są menedżerami (Titles.IsManager) i którzy mają datę w polu Certified (Employees.Certified). Wyniki muszą być pogrupowane według grupy, w której znajduje się każdy sklep.

Do tej pory mam to:

WYBIERZ d.GroupId, Suma (d.cert_complete) AS SumOfcert_complete, Count (d.cert_complete) AS CountOfcert_complete OD (WYBIERZ ODRÓŻNIENIE s.GroupId, e.EmployeeID, IIf (e.Certyfikowany jest zerowy, 0,1) AS cert_complete Z ((Sklepy AS s DOŁĄCZ DO WEWNĘTRZNE EmployeeStores AS es ON s.StoreId = es.StoreId) DOŁĄCZ DO WEWNĘTRZNEGO Pracowników AS e ON es.EmployeeId = e.EmployeeID) WEWNĘTRZNE DOŁĄCZ Tytuły AS t ON e.TitleId = t.TitleId ) AS d GDZIE t.IsManager GROUP BY d.GroupId;

A potem to

WYBIERZ q.GroupId, (SumOfcert_complete / CountOfcert_complete) * 100 AS procent_certyfikowany, Groups.GroupName Z qryGroupCert_base AS q DOŁĄCZ DO WEWNĘTRZNYCH Grupy WŁĄCZONE q.GroupId = Groups.GroupId;

Możesz zobaczyć w pierwszym zapytaniu, w którym dodałem tabelę tytułów.

1) Pojawia się monit o IsManager, chociaż nie wiem dlaczego 2) Wyniki, które wracają, nie różnią się niż przed dodaniem IsManager

Ktoś widzi, co tu jest nie tak?

Wielkie dzięki

Odpowiedzi:

0 dla odpowiedzi № 1

W ramach pierwszego zapytania masz następujące podzapytanie, które obejmuje tytuły aliasowane jako „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

Następnie, po Definicja podzapytania, masz tę klauzulę WHERE:

WHERE t.IsManager

Problemem jest alias „t” i kolumna IsManageristnieją tylko w podzapytaniu -> nie są one znane zapytaniu zewnętrznemu (nadrzędnemu). W przypadkach, gdy aparat bazy danych Access napotyka coś, czego nie rozpoznaje jako nazwy obiektu, funkcji, wartości literałowej lub słowa kluczowego SQL, uważa, że ​​coś musi być parametrem ... więc pojawia się pole wprowadzania z prośbą o podanie wartość parametru (IsManager).

Myślę, że powinieneś przenieść klauzulę WHERE wewnątrz definicji podzapytania.

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 dla odpowiedzi nr 2

Być może musisz podać kryteria dla t.IsManager, taki jak t.IsManager = TRUE. Jeśli klauzula where nie ma wartości, aby ustawić ją na równą, Access prawdopodobnie nie rozpoznaje jej w rzeczywistej kolumnie, ale uważa, że ​​jest to parametr zapytania.