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 № 1W 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.