2012-04-26 71 views
0
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 [email protected] 
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帮助查询错误“Where聚合可能不会出现在Where子句中”

回答

1

由聚集的查询确定必须投入,因为它是在聚合的查询进行评估,而不是在源查询具有任意值。你还需要告诉它你想按你的计数。

试试这个,只要你想找到谁符合您的标准的人的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 

NB:聚集是由一个功能上的一组结果确定的任何值这将组,像COUNT,SUM,AVG ..