#sql #ms-access #join #left-join
#sql #ms-access #Присоединиться #левое соединение
Вопрос:
Ниже приведен мой запрос:
SELECT
UT.AgentName AS [Agent Name],
UT.TeamName AS Team,
Format(Now(),"Short Date") AS [As Of],
Sum(I.RegPointValue) AS Points
FROM
(SELECT
UU.AgentID,
(Nz(UU.LastName,'') ", " Nz(UU.FirstName,'')) AS AgentName ,
TT.TeamName
FROM
Users AS UU
INNER JOIN
Teams AS TT
ON UU.TeamID = TT.TeamID) AS UT
LEFT JOIN
(InfractionTypes AS I
INNER JOIN
(DateCodes AS D
INNER JOIN
AquiredInfractions AS AI
ON D.DateID = AI.DateID)
ON I.InfractionID = AI.InfractionID)
ON UT.AgentID = AI.AgentID
WHERE (((D.DateValue)>=#4/1/2014#))
GROUP BY UT.TeamName, UT.AgentName, I.RegPointValue;
Что это делает, так это суммирует все баллы, которые человек получит в зависимости от нарушений посещаемости, которые он получил. Если я изменю LEFT JOIN
на INNER JOIN
запрос, он будет работать, но возвращает только имена людей, которые получили нарушения посещаемости. Но я бы хотел, чтобы оно возвращало имена всех пользователей и имело 0 для их баллов, если они их не получили.
Ошибка, которую я получаю при попытке сохранить или выполнить Join expression not supported
. Я пытался заставить это работать в течение последних нескольких часов, изменяя порядок соединений, но безрезультатно. Использование MS-Access 2013.
Ответ №1:
Вам не хватает некоторых псевдонимов.
Каждому внутреннему запросу, используемому в качестве таблицы, должен быть присвоен псевдоним, и при их объединении вы должны использовать этот псевдоним и только выбранные столбцы по условию соединения.
Например, добавьте псевдонимы к этим строкам:
...
ON D.DateID = AI.DateID) AS SOMETHING_1
ON I.InfractionID = AI.InfractionID) AS SOMETHING_2
и т. д
Комментарии:
1. После сна я понял, что вы имели в виду, и заставил его работать. Спасибо.