我是一个试图将一些东西移植到MS SQL Server的MySQL用户.
我正在加入几个表,并通过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, 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
这样,您可以通过操作避免额外的组,并且您可以获得所需的任何数据.此外,您有更好的机会在某些情况下充分利用索引(如果您没有返回完整的信息),并且可以更好地与分页结合使用.