2011-05-13 4 views
3

나는 다음과 같은 코드를 사용하려고 해요 :집계는 WHERE 절에 나타나지 않을 수 있습니다

m_Set.ClearQueryInfo(); 
m_Set.SetParameterWhere("PatID = @PatIDParam AND EffectiveEnrollmentDate IN (Select MAX(EffectiveEnrollmentDate))"); 
m_Set.SetWhere("PatID = ? AND EffectiveEnrollmentDate IN (Select MAX(EffectiveEnrollmentDate))"); 
m_Set.SetNumParams(1); 
m_Set.SetParam("@PatIDParam", 1, PatIDParam.ToString()); 

을하지만 다음과 같은 오류 수신 결국 :

An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference, SELECT dbo.[PatRoster].* FROM dbo.[PatRoster] WHERE PatID = @PatIDParam AND EffectiveEnrollmentDate IN (Select MAX(EffectiveEnrollmentDate))

답변

2

검색어가 유효하지 않습니다 - Select MAX(EffectiveEnrollmentDate)은 완료되지 않았습니다. 해당 하위 쿼리의 어딘가에서 EffectiveEnrollmentDate을 선택해야합니다.

또한 MAX()은 하나의 값만 반환하므로 IN은 필요하지 않습니다. 바로 비교 연산자 =을 사용할 수 있습니다. 오류 메시지에서 알 수 있듯이

+0

고마워요. 조금 일찍 나는 그것을 잡지 못했습니다. –

2

당신은 여기에서 쿼리 테이블 소스를 지정하지 않을 :

(Select MAX(EffectiveEnrollmentDate)) 

변경 그것을 :

(Select MAX(EffectiveEnrollmentDate) FROM PatRoster) 
+0

감사합니다 :) 비트. –

0

,이 작업을 수행하는 올바른 방법은 하위 쿼리입니다 :

select bar.foo 
from bar 
where bar.foo = (select max(subbar.foo) from bar as subbar); -- subquery 
0

하위 쿼리 : (Select MAX(EffectiveEnrollmentDate))는 소스 부족, 그것은 외부 쿼리를 참조 할 수 없습니다

SELECT dbo.[PatRoster].* 
FROM dbo.[PatRoster] 
WHERE PatID = @PatIDParam AND EffectiveEnrollmentDate = (Select MAX(EffectiveEnrollmentDate) FROM dbo.[PatRoster]) 
0

하위 쿼리에서 외부 쿼리의 값에 대해 집계 할 수 없습니다.

AND EffectiveEnrollmentDate IN (Select MAX(EffectiveEnrollmentDate))

싶은 것은 이것이다 : 나는 그것을 잡을하지 않았다 초기

SELECT dbo.[PatRoster].* 
    FROM dbo.[PatRoster] 
WHERE PatID = @PatIDParam 
    AND EffectiveEnrollmentDate = (Select MAX(EffectiveEnrollmentDate) 
            FROM dbo.[PatRoster] 
            WHERE PatID = @PatIDParam) 
관련 문제