Sql server SQL查询嵌套选择语法

Sql server SQL查询嵌套选择语法,sql-server,nested-query,Sql Server,Nested Query,我正在尝试创建一个查询,为我提供每个OfficeID的代理总数(AgentID)。如果有人能为我指引正确的方向,也如果有资源可以为您提供一系列不同类型的查询示例,这些示例对未来很有用 我现在的问题是语法。我不确定需要去哪里才能得到上面想要的输出 以下是我目前的情况: 表办事处和代理人: CREATE TABLE OFFICE ( OfficeID NVARCHAR(5) UNIQUE, OfficeAddress NVARCHAR(18) NOT NULL, PRI

我正在尝试创建一个查询,为我提供每个OfficeID的代理总数(AgentID)。如果有人能为我指引正确的方向,也如果有资源可以为您提供一系列不同类型的查询示例,这些示例对未来很有用

我现在的问题是语法。我不确定需要去哪里才能得到上面想要的输出

以下是我目前的情况:

表办事处和代理人:

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
类似这样的情况(您所需的输出似乎缺失):

请注意使用表别名,这是一种保持查询简洁的推荐做法。

类似这样的用法(您所需的输出似乎缺失):


请注意使用表别名,这是一种保持查询简洁的推荐做法。

我会使用联接和分组方式来实现这一点,无需嵌套:

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

我会使用连接和分组方式来完成此操作,无需或不需要嵌套:

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可以以多种方式为您提供所需的方式,您可以根据优化的解决方案进行选择。

您需要根据我认为您的情况不需要复杂的查询来具体说明所需内容。例如,您可以从下面的查询中获得所需的输出

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

SQL可以在很多方面为您提供所需的方式,您可以根据优化的解决方案来选择它们。

-在ANSI-92 SQL标准中(超过25年前),旧样式的逗号分隔表样式被正确的ANSI
JOIN
语法所取代它的使用是不被鼓励的——在ANSI-92 SQL标准中,旧式的逗号分隔表列表样式被正确的ANSI
JOIN
语法所取代(25年前),它的使用是不被鼓励的。我在发布我的答案之前确实考虑过这一点,但我决定保留连接,以防办公室没有代理,OP可能仍然需要0结果。在发布答案之前,我确实考虑过这一点,但我决定在没有代理的办公室中保留联接,OP可能仍然需要0结果。