Sql 分组方式,计数不为';行不通
我正在尝试使用GROUPBY和count函数,但这不起作用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
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?这是你期待的吗?你怎么知道?我修改了代码,得到了我想要的。非常感谢。