sql-server - 如何包含其他分组列

标签 sql-server tsql

我正在加入几个表,并通过 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/

相关文章:

sql-server - 调试具有用户定义数据类型的存储过程

tsql - 条件 where 子句 T-SQL

sql-server - SSDT-BI 可以与 SQL Server 2008 R2 一起使用吗?

sql-server - 使用 ORDER BY 子句创建 View

sql-server - 如何使用 ASP.NET Core 读取 SQL Server 文件流

SQL 服务器 : Attempting to output a count with a date

sql - 与加入和地点相关的性能

sql-server - 为什么 UPDATE .WRITE() 仅在我使用 [column].WRITE() 时才有效,而不是 [table].[column].WRITE()?

sql - 无效的列名 'FinalTotal'

sql - 如何使用 SSIS 从平面文件中将数据插入到加密的 varbinary 字段中?