SQL Server语言

时间:2011-11-08 08:26:48

标签: sql sql-server

在northwind数据库中查找具有向他/她报告的最大人数的经理。我写了一个查询:

Select reportsto from 
    (select top 1 reportsto,
    count(reportsto)from employees group by 
    reportsto order by count(reportsto) desc)

但是它会出错

  

')'附近的语法不正确。

3 个答案:

答案 0 :(得分:3)

这不是非常明确的消息意味着您需要在所述(最后一个)括号之后添加别名。 SQL Server要求您必须为子选择指定别名。所以,它应该是这样的:

Select reportsto from 
    (select top 1 reportsto,
    count(reportsto)from employees group by 
    reportsto order by count(reportsto) desc) s  /* 's' is just an example,
                                                    you can assign any alias */

请注意,这不适用于与INEXISTSANY/SOMEALL等谓词一起使用的子查询。在这种情况下,您直接从子选择中提取数据,这恰好是子选择必须别名的情况。

另一方面,您在查询中尝试执行的操作并不需要进行子选择。这也可以:

select top 1 reportsto
from employees
group by reportsto
order by count(reportsto) desc

也就是说,您只需从SELECT子句中删除COUNT()列,并按原样使用子查询的其余部分,结果将与原始意图相同。当然,除非我们能看到更多内容。

答案 1 :(得分:1)

尝试在count(reportsto)之后添加空格。


count(reportsto) from

而不是

count(reportsto)from

答案 2 :(得分:1)

您可以使用以下

SELECT *
FROM   Employees
WHERE  EmployeeID IN (SELECT TOP 1 WITH TIES ReportsTo
                      FROM   Employees
                      GROUP  BY ReportsTo
                      ORDER  BY COUNT(ReportsTo) DESC)  

WITH TIES选项表示如果多个经理有最多人向他们报告,您将获得所有人的详细信息。