TOP N WITH TIES与UNION结合使用可行吗?报错问题咨询
解决TOP 1 WITH TIES + UNION的SQL错误
你遇到的报错原因很明确:TOP N WITH TIES必须搭配对应的ORDER BY子句使用,而且这个ORDER BY要放在每个用到TOP的子查询内部,不能只在UNION整体末尾添加。
修正后的代码如下,给每个子查询单独添加ORDER BY,确保各自筛选出任务量最高的员工后再合并结果:
-- 管家表中任务量最多的员工 SELECT TOP 1 WITH TIES e.EmpID AS 'EmployeeID', COUNT(ScheduleID) AS 'Task Count' FROM EMPLOYEE e JOIN CLEANING c ON e.empid = c.hkid GROUP BY e.empid ORDER BY 'Task Count' DESC UNION -- 导游表中任务量最多的员工 SELECT TOP 1 WITH TIES e.EmpID AS 'EmployeeID', COUNT(ResID) AS 'Task Count' FROM EMPLOYEE e JOIN RESERVATION r ON e.empid = r.guideid GROUP BY e.empid ORDER BY 'Task Count' DESC
额外提示:
- 建议用
JOIN语法代替旧的逗号连接表结构,可读性更强。 - 如果不需要自动去重(比如允许同一个员工在两个表中都是任务量最高),可以把
UNION换成UNION ALL,执行效率更高。 - 每个子查询的ORDER BY是筛选TOP 1 WITH TIES的必要条件,能确保选出所有任务量并列最高的员工,而非仅单个员工。
内容的提问来源于stack exchange,提问作者netorare
相关产品推荐
相关产品推荐

