我是一个
MySQL用户,试图将一些事情移交给MS sql Server.
我加入了几张表,并通过GROUP BY汇总了一些列.
一个简单的例子就是员工和项目:
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,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
这样,您可以通过操作避免额外的组,您可以获取所需的任何数据.此外,您还有机会在某些情况下良好利用索引(如果您没有返回完整的信息),并且可以更好地与分页结合使用.