Синтаксис вложенных запросов SQL - PullRequest
0 голосов
/ 05 декабря 2018

Извините, мои знания начального уровня по 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 ]

0 голосов
/ 05 декабря 2018

Я бы сделал это с 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
0 голосов
/ 05 декабря 2018

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

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

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

Наслаждайтесьмат

0 голосов
/ 05 декабря 2018

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

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