2012-03-16 2 views
0
하위 쿼리

에서 값 유지 : 위에서는 SQL 서버 -이 필드를 나는 다음과 같은 쿼리 한

select p.ID, 
     Received = (select Rec 
        from Exp 
        where EstAmt = (select MAX(ex.EstAmt) 
              from Exp ex 
              where ex.Prot = p.ID 
              and EstAmt > 0) 
        ) 
From Prot 
where Received = 1 

을받은 내가 녹화가 무엇의 가치를 얻을 것이다 별칭으로 생성 된 필드입니다. Rec는 테이블의 필드입니다.

하지만 Where 절에 Received를 넣으면 다음과 같이 표시됩니다. '잘못된 열 이름'이 수신되었습니다. 언급 한 바와 같이 Received는 테이블의 필드가 아니라 하위 쿼리에서 값을 가져 오는 자리 표시 자입니다. 해당 값이 1 인 경우에만 결과를 표시해야하므로 Where 절에서 Received를 가질 수 있습니다.

+0

SELECT 절에 하위 쿼리를 유지할 수 없습니다. – Teja

답변

0

원래 쿼리의 결과를 하위 쿼리로 필터링해야합니다 (

). 이 같은
select * from 
(
    select p.ID, 
      Received = (select Rec from Exp 
         where EstAmt = (select MAX(ex.EstAmt) from Exp ex 
             where ex.Prot = p.ID and EstAmt > 0) 
        ) 

From Prot 
) subsel 
where Received = 1 
+0

@NatePet 내 대답을 사용하는 것을 봅니다. 새 질문에 http://stackoverflow.com/questions/9740065/sql-server-subquery-with-case. 제발, 당신을 도왔다면이 대답을 upvote/accept하는 것을 잊지 마세요. (당신이 다른 질문에서 그것을 사용하고 있기 때문에 믿습니다.) –

+0

. 도와 주셔서 감사합니다 –

0

뭔가 :

SELECT 
    * 
FROM 
(
    select 
     p.ID, 
     Received = (select Rec from Exp where EstAmt = (select MAX(ex.EstAmt) from Exp ex where ex.Prot = p.ID 
         and EstAmt > 0) 
         ) 
    From Prot 
) AS t 
where 
    Received = 1 
1

당신은 단지 당신이 그것을 선택할 필요가 없습니다이 ON1이고, 선택 where 절에 전체 하위 쿼리를 이동하고 1과 비교하려면 그것이 무엇인지 안다면 ...

(이 질문에 대한 대답은하지 않습니다. 하위 쿼리에서는 어디에서 문제를 해결할 수 있습니까?)