2017-10-20 14 views
-2

나는이 하위 쿼리가 : 지금 un001.exist에 따라 외부 쿼리에 존재하는 필드에 액세스하려고외부 쿼리의 하위 쿼리에서 "선택 1"로 정의 된 필드에 액세스 할 수없는 이유는 무엇입니까?

LEFT JOIN (SELECT 1 as exist 
        , MAX (ev.EventDate) as eventdate 
        , evt.EventCode 
        , CCaseID 
      FROM stg.Event ev 
      JOIN stg.EventTemplate evt 
      ON ev.EventTemplateID = evt.ID 
      WHERE evt.EventCode = 'UN002' 
      Group by CCaseID, evt.EventCode) as un002 
    ON un002.CCaseID = ev.CCaseID 
WHERE evt.EventCode = 'UN001' 
    AND (un002.eventdate < ev.eventdate OR un002.eventdate IS NULL) 
Group by ev.CCaseID, evt.EventCode) as un001 
    ON cc.ID = un001.CCaseID 

을하지만, SQL Server는 잘못된 필드 것을 알려줍니다. 내가 뭘 놓치고 있니?

+1

열이 단지 수는 [1] 대괄호와 같이 브라켓 시도 하나라고합니다. – russ

+2

기본 쿼리에서 "exist"라는 열에 액세스 할 수없는 이유는 무엇입니까? –

+3

음 .... un001.exist는 유효한 열이 아닙니다. 해당 하위 쿼리의 이름을 un002로 지정했습니다. 더 나은 서식이 있는지 쉽게 알 수 있습니다. –

답변

1

un001은 하위 쿼리에 속하는 exist이 아닙니다.

또한 GROUP BY과 및 ON이 있으므로 누락 된 코드가 있습니다.

코드를 단순화하고 CTE를 사용하여 읽고 디버그하기 쉽도록해야합니다. 이 같은

뭔가 :

WITH un001 as (SELECT ...), 
un002 as (SELECT ...) 
SELECT * 
FROM un001 
JOIN un002 
    ON un001 .CCaseID = un002.CCaseID 
+1

게시 된 코드에는 복수형이 없습니다. –

+0

@SeanLange 당신이 맞습니다. 나는 그 질문을 완전히 그리워합니다. –