Синтаксис вложенных запросов SQL

Извините за мои знания начального уровня по SQL, но я пытаюсь создать запрос, который предоставляет мне общее количество агентов (AgentID) для каждого OfficeID. Если кто-то может направить меня в правильном направлении, а также, если есть ресурсы, которые дают вам множество примеров различных типов запросов, которые будут полезны в будущем!

Моя проблема сейчас в синтаксисе... Я не уверен, куда нужно идти, чтобы получить желаемый результат выше.

Вот что у меня есть сейчас:

Столы ОФИС и АГЕНТ:

CREATE TABLE OFFICE
(
     OfficeID NVARCHAR(5) UNIQUE,
     OfficeAddress NVARCHAR(18) NOT NULL,
     PRIMARY KEY(OfficeID)
)
GO

CREATE TABLE AGENT
(
     AgentID NVARCHAR(8) UNIQUE,
     OfficeID NVARCHAR(5) NOT NULL,
     AgentType NVARCHAR(9) NOT NULL,
     AgentFName NVARCHAR(10) NOT NULL,
     PRIMARY KEY (AgentId),
     FOREIGN KEY (OfficeID) REFERENCES OFFICE
             ON DELETE CASCADE
             ON UPDATE CASCADE
)
GO

Запрос:

SELECT
    OFFICE.OfficeID
FROM 
    OFFICE,
    (SELECT COUNT(AgentID)
     FROM AGENT, OFFICE 
     WHERE OFFICE.OfficeID = AGENT.OfficeID
     GROUP BY AGENT.OfficeID) 
ORDER BY 
    OFFICE.OfficeID

3 ответа

Решение

Примерно так (желаемый вывод отсутствует):

SELECT O.OfficeID
  , (
    SELECT COUNT(*)
    FROM AGENT A
    WHERE A.OfficeID = O.OfficeID
)
FROM OFFICE O
ORDER BY O.OfficeID

Я бы сделал это с помощью JOIN и GROUP BY, вложенности не требуется или не требуется:

SELECT o.OfficeID, COUNT(a.AgentID) NumberOfAgents
FROM Office o
LEFT JOIN Agents a ON a.OfficeID = o.OfficeID
GROUP BY o.OfficeID

Вы должны быть конкретны с тем, что вы хотите, в соответствии с тем, что, я думаю, в вашем случае не требуется сложный запрос. Например, вы можете получить желаемый результат из запроса ниже

Select officeid, count(1) as NoofAgents from Agents 
group by officeid

SQL может дать вам желаемый путь во многих отношениях, и вы можете выбрать их на основе оптимизированного решения.

Наслаждайся, приятель

Другие вопросы по тегам