我肯定遗漏了一些显而易见的东西,但为什么
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不是一个聚合函数吗?
发布于 2012-07-12 14:53:09
因为cs.ContractStatusCreated不在group子句中,所以它不知道从哪里获取数据。
更好的是,如果您按它进行分组,您将得到一个HAVING 1=1条件,而您的max(cs.ContractStatusCreated)将不会做您想做的事情。我认为您需要一个自连接或子查询来找到要比较的最大值。
发布于 2012-07-12 14:53:07
错误:
MSG8121、级别16、状态1、第1列'cs.ContractStatusCreated‘在HAVING子句中无效,因为它既不包含在聚合函数中,也不包含在GROUP子句中。
MAX是聚合函数
但ContractStatusCreated不在组内
发布于 2012-07-12 15:02:37
还没有检查过它,但是可以将“max”写入子查询中,如下所示:
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
)https://stackoverflow.com/questions/11454528
复制相似问题