2012-05-22 5 views
0

'master'레코드와 관련 세부 레코드가 포함 된 레거시 테이블이 있습니다. 세부 레코드는 "-nnn"의 마스터 키에 추가되어 식별됩니다. 세부 레코드가없고 몇 가지 변형을 시도한 마스터 레코드를 찾은 다음 마침내 가장 단순한 요소로 파기해야합니다.MS SQL Server 2005에서 쿼리/선택

select (select count(*) from dbo.client as cl2 
    where cl2.acct_no like (cl1.acct_no + '-%')) as countx, acct_no 
from dbo.client as cl1 

을하고있다 기록 얼마나 많은 세부 사항에 따라 예상되는 제로 또는 비 - 제로 결과를 표시합니다 :

이 작동합니다. 내가 지금처럼, 제로 세부 레코드 만 레코드를 선택 카운트 결과를 사용하려고하면

그러나, "잘못된 열 이름 'countx'"

:

select (select count(*) from dbo.client as cl2 
    where cl2.acct_no like (cl1.acct_no + '-%')) as countx, acct_no 
from dbo.client as cl1 
where countx = 0 

를 오류가 발생합니다

나는 무엇을 여기에서 놓치고 있냐?

+0

원하는 것을 얻을 in를 사용해보십시오. 그것은 오류입니다. – Rahul

답변

1

CountX는 명명 된 열이 아닙니다.

이것은 최선의 방법은 아니지만 전체 쿼리를 래핑하는 것이 효과적 일 수 있습니다.

SELECT CountX, Acct_No 
FROM 
(
    select (select count(*) from dbo.client as cl2 
     where cl2.acct_no like (cl1.acct_no + '-%')) as countx, acct_no 
    from dbo.client as cli 
) As InnerQuery 
where countx = 0 

편집

이 보면, 그것은 대신에 중첩 된 선택의, 조인을 사용하여 더 나은 수행 될 수있다.

SELECT  cl1.acct_no, Count(*) 
FROM  dbo.client cl1 --the master key numbers 
INNER JOIN dbo.client cl2 --the sub-keys 
      ON cl1.acct_no NOT LIKE '%-%' --No dashes in the MasterKey 
      AND cl1.acct_no LIKE (cl2.acct_no + '-%') 
GROUP BY cl1.acct_no 
+0

Hmmm ... 그래서 where 절에서 열 이름을 사용할 수 있지만 column 별칭을 사용할 수 없습니까? 두 번째 'from'에서 'cli'를 'cl1'로 변경하면 쿼리가 작동합니다 ... 감사합니다. 내 진짜 질문에 나를 시작하게 해. – JESii

0

어디 절 당신이 열 별칭을 사용할 수 없습니다

select Acct_No from dbo.client where Acct_No not in 
    (
    select acct_no from dbo.client where acct_no like acct_no + '-%' 
) 
관련 문제