我正在加入几个表,并通过 GROUP BY 聚合一些列。这就是我用 MySQL 所做的,现在我将它们移植到 MSSQL。
一个简单的例子是员工和项目:
select empID, fname, lname, title, dept, count(projectID)
from employees E left join projects P on E.empID = P.projLeader
group by empID
...这在 MySQL 中可行,但 MS SQL 更严格,要求所有内容要么包含在聚合函数中,要么作为 GROUP BY 子句的一部分。
因此,当然,在这个简单的示例中,我假设我可以在 group by 子句中包含额外的列。但我正在处理的实际查询非常复杂,并且包括对某些非聚合列执行的一堆操作...也就是说,尝试将所有这些列都包含在 group by 子句中会变得非常难看.
那么有没有更好的方法来做到这一点?
最佳答案
您可以让它与以下几行相关的东西一起工作:
select e.empID, fname, lname, title, dept, projectIDCount
from
(
select empID, count(projectID) as projectIDCount
from employees E left join projects P on E.empID = P.projLeader
group by empID
) idList
inner join employees e on idList.empID = e.empID
这样你就可以避免额外的分组操作,并且可以获得任何你想要的数据。另外,在某些场景下(如果不返回完整信息)您有更好的机会充分利用索引,并且可以更好地与分页结合。
关于sql-server - 如何包含其他分组列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/626788/