查询中出现错误,例如“聚合可能不会出现在Where子句中”

时间:2012-04-26 06:14:43

标签: sql

ALTER PROCEDURE Sp_Num_Tracking 
@UserID int

AS
BEGIN
declare @lastLogonDate datetime;
ALTER PROCEDURE Sp_num_Tracking 
@UserID int

AS
BEGIN
declare @lastLogonDate datetime;
declare @CurrentLogonDate datetime;
declare @onemonthtime datetime;
declare @frmbeg int;
declare @oneweektime datetime;

select @lastLogonDate=  max( crimedate) from tblcrime where UserID=@UserID
set @CurrentLogonDate=getdate()
set @onemonthtime=dateadd(mm,-1,@CurrentLogonDate)
set @oneweektime=dateadd(dd,-7,@CurrentLogonDate)
select @frmbeg=  max(crimeID)-min(CrimeID)  from tblcrime 



SELECT count(o.crimeID)
from tblcrime o
inner join  
tblContractor ts 
on o.MainContractorID=ts.ContractorID

inner join 
tblBusiness tb 
on o.MainContractorBUID=tb.BusinessID
inner join tblservant tw on
o.servantID=tw.servantID

inner join tblUser u 
on  u.ContractorID=o.MainContractorID



where count(o.crimeID) between @lastLogonDate and @onemonthtime or count(o.crimeID) between @lastLogonDate and @oneweektime

END

但它给出的错误就像这样“聚合可能不会出现在WHERE子句中,除非它在HAVING子句或选择列表中包含的子查询中,并且聚合的列是外部引用”。哪部分我想修改.... Plz帮助

1 个答案:

答案 0 :(得分:1)

由查询上的聚合确定的任何值都必须放入HAVING,因为它是在聚合查询上计算的,而不是在源查询上计算的。您还需要告诉它您要将计数分组的内容。

以此为例,假设您要查找符合条件的人的MAINCONTRACTORID:

SELECT 
   count(o.crimeID),
   o.MainContractorID
from tblcrime o
inner join  
tblContractor ts 
on o.MainContractorID=ts.ContractorID

inner join 
tblBusiness tb 
on o.MainContractorBUID=tb.BusinessID
inner join tblservant tw on
o.servantID=tw.servantID

inner join tblUser u 
on  u.ContractorID=o.MainContractorID

GROUP BY 
   o.MainContractorID
HAVING 
   count(o.crimeID) between @lastLogonDate and @onemonthtime or count(o.crimeID) between @lastLogonDate and @oneweektime

注意:聚合是由一组函数确定的任何值,这些结果将被分组,如COUNT,SUM,AVG ..