Sql 分组方式,计数不为';行不通

Sql 分组方式,计数不为';行不通,sql,sql-server,Sql,Sql Server,我正在尝试使用GROUPBY和count函数,但这不起作用 SELECT projects.AgencyId, projects.ProgramId, count(projects.ProjStatusByMin) as status, projects.ProjStatusByMin from projects where projects.AgencyId=40 group by projects.ProjStatusBy

我正在尝试使用GROUPBY和count函数,但这不起作用

SELECT 
    projects.AgencyId,
    projects.ProgramId,
    count(projects.ProjStatusByMin) as status,
    projects.ProjStatusByMin 
from 
    projects 
where 
    projects.AgencyId=40 
group by 
    projects.ProjStatusByMin
上面的代码在MySQL中工作得非常好,现在我想在SQL Server中实现同样的功能

Select 
    ProjStatusByMin,
    COUNT(ProjStatusByMin) [projstatus] 
from 
    Projects
where 
    AgencyId=40 
group by 
    ProjStatusByMin,AgencyId,ProjId
但是,如果我选择一列,如下面的代码,则按工作分组

Select 
    ProjStatusByMin,
    COUNT(ProjStatusByMin) [projstatus] 
from 
    Projects
where 
    AgencyId=40 
group by 
    ProjStatusByMin

现在,我如何在选择了多列的情况下实现group by?

您必须将所有列(count函数中的列除外)添加到group by子句中

SELECT projects.AgencyId,projects.ProgramId,count(projects.ProjStatusByMin) as status,
projects.ProjStatusByMin 
from projects 
where projects.AgencyId=40 
group by projects.ProjStatusByMin, projects.AgencyId,projects.ProgramId

在Sql Server中,您必须在group by子句中写入要在select语句中选择的所有列名。

在除mysql之外的大多数oher DB中,您需要select中的所有列,如果您不使用聚合函数(Count、SUM等),mysql将扩展group by子句以允许原始Sql工作。但是,SQLServer不这样做。使用mySQL扩展存在风险,您可能没有意识到这一点。“工作完美”?真正地如果给定的ProjStatusByMin有多个代理ID和ProgramId,您会得到哪个代理ID和ProgramId?这是你期待的吗?你怎么知道?我修改了代码,得到了我想要的。非常感谢。