首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过在提供聚合函数时请求提供聚合函数,SQL Server 2000组

通过在提供聚合函数时请求提供聚合函数,SQL Server 2000组
EN

Stack Overflow用户
提问于 2012-07-12 14:51:39
回答 3查看 892关注 0票数 0

我肯定遗漏了一些显而易见的东西,但为什么

代码语言:javascript
复制
SELECT     c.ContractID, max( cs.ContractStatusCreated)
FROM       dbo.NMPT_Contract AS c INNER JOIN
           dbo.NMPT_ContractStatus AS cs ON c.ContractID = cs.ContractID INNER JOIN
           dbo.CMSS_Status AS s ON cs.StatusID = s.StatusID
group by  c.ContractID
having cs.ContractStatusCreated = MAX(cs.ContractStatusCreated)

从Server 2000返回以下内容?

MSG8121、级别16、状态1、第1列'cs.ContractStatusCreated‘在HAVING子句中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。

MAX不是一个聚合函数吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-12 14:53:09

因为cs.ContractStatusCreated不在group子句中,所以它不知道从哪里获取数据。

更好的是,如果您按它进行分组,您将得到一个HAVING 1=1条件,而您的max(cs.ContractStatusCreated)将不会做您想做的事情。我认为您需要一个自连接或子查询来找到要比较的最大值。

票数 1
EN

Stack Overflow用户

发布于 2012-07-12 14:53:07

错误:

MSG8121、级别16、状态1、第1列'cs.ContractStatusCreated‘在HAVING子句中无效,因为它既不包含在聚合函数中,也不包含在GROUP子句中。

MAX是聚合函数

但ContractStatusCreated不在组内

票数 1
EN

Stack Overflow用户

发布于 2012-07-12 15:02:37

还没有检查过它,但是可以将“max”写入子查询中,如下所示:

代码语言:javascript
复制
select     ContractID, ContractStatusCreated
FROM       dbo.NMPT_Contract AS x INNER JOIN            
           dbo.NMPT_ContractStatus AS y ON x.ContractID = y.ContractID
where (x.ContractID, y.ContractStatusCreated) = (
    SELECT     c.ContractID, max( cs.ContractStatusCreated) 
    FROM       dbo.NMPT_Contract AS c INNER JOIN            
               dbo.NMPT_ContractStatus AS cs ON c.ContractID = cs.ContractID INNER JOIN            
               dbo.CMSS_Status AS s ON cs.StatusID = s.StatusID 
    group by  c.ContractID
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11454528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档